c语言中文网pdf免费下载,C语言中文网VIP教程11.9.pdf

文件的复制是常用的功能 要求写一段代码 让用户输入要复制的文件以及新建的文件 然 后对文件进行复制 能够复制的文件包括文本文件和二进制文件 你可以复制 1G 的电影 也可以复制 1Byte 的 txt 文档 实现文件复制的主要思路是 开辟一个缓冲区 不断从原文件中读取内容到缓冲区 每读取 完一次就将缓冲区中的内容写入到新建的文件 直到把原文件的内容读取完 这里有两个关键的问题需要解决 1 开辟多大的缓冲区合适 缓冲区过小会造成读写次数的增加 过大也不能明显提高效率 目前大部分磁盘的扇区都是 4K 对齐的 如果读写的数据不是 4K 的整数倍 就会跨扇区读 取 降低效率 所以我们开辟 4K 的缓冲区 2 缓冲区中的数据是没有结束标志的 如果缓冲区填充不满 如何确定写入的字节数 最 好的办法就是每次读取都能返回读取到的字节数 fread 的原型为 size t fread void ptr size t size size t count FILE fp 它返回成功读写的块数 该值小于等于 count 如果我们让参数 size 等于 1 那么返回的 就是读取的字节数 注意 fopen 一定要以二进制的形式打开文件 不能以文本形式打开 否则系统会对文件 进行一些处理 如果是文本文件 像 txt 等 可能没有问题 但如果是其他格式的文件 像 mp4 rmvb jpg 等 复制后就会出错 无法读取 代码实现 1 include 2 include 3 4 int copyFile char fileRead char fileWrite 5 6 int main 7 char fileRead 100 要复制的文件名 8 char fileWrite 100 复制后的文件名 9 10 获取用户输入 11 printf 要复制的文件 12 scanf s fileRead 13 printf 将文件复制到 14 scanf s fileWrite 15 16 进行复制操作 17 if copyFile fileRead fileWrite 18 printf 恭喜你 文件复制成功 n 19 else 20 printf 文件复制失败 n 21 22 23 return 0 24 25 26 27 文件复制函数 28 paramfileRead要复制的文件 29 paramfileWrite复制后文件的保存路径 30 returnint1 复制成功 2 复制失败 31 32 int copyFile char fileRead char fileWrite 33 FILE fpRead 指向要复制的文件 34 FILE fpWrite 指向复制后的文件 35 int bufferLen 1024 4 缓冲区长度 36 char buffer char malloc bufferLen 开辟缓存 37 int readCount 实际读取的字节数 38 39 if fpRead fopen fileRead rb NULL fpWrite fopen fileWrite wb NULL 40 printf Cannot open file press any key to exit n 41 getch 42 exit 1 43 44 45 不断从 fileRead 读取内容 放在缓冲区 再将缓冲区的内容写入 fileWrite 46 while readCount fread buffer 1 bufferLen fpRead 0 47 fwrite buffer readCount 1 fpWrite 48 49 50 free buffer 51 fclose fpRead 52 fclose fpWrite 53 54 return 1 55 运行结果 要复制的文件 d 1 mp4 将文件复制到 d 2 mp4 恭喜你 文件复制成功 如果文件不存在 会给出提示 并终止程序 要复制的文件 d 123 mp4 将文件复制到 d 333 mp4 d cyuyan txt No such file or directory 第 46 行是文件复制的核心代码 通过 fread 函数 每次从 fileRead 文件中读取 bufferLen 个字节 放到缓冲区 再通过 fwrite 函数将缓冲区的内容写入 fileWrite 文件 正常情况下 每次会读取 bufferLen 个字节 即 readCount bufferLen 如果文件大小不 足 bufferLen 个字节 或者读取到文件末尾 实际读取到的字节就会小于 bufferLen 即 readCount bufferLen 所以通过 fwrite 写入文件时 应该以 readCount 为准

展开阅读全文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值