文件的复制是常用的功能,要求写一段代码,让用户输入要复制的文件以及新建的文件,然后对文件进行复制。能够复制的文件包括文本文件和二进制文件,你可以复制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等,复制后就会出错,无法读取

代码实现:

运行结果:

要复制的文件: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为准。

第十一章 文件操作_C语言实现文件复制功能(包括文本文件和二进制文件)相关推荐

  1. 第十一章 文件操作_C语言插入、删除、更改文件内容

    我们平时所见的文件,例如 txt.doc.mp4 等,文件内容是按照从头到尾的顺序依次存储在磁盘上的,就像排起一条长长的队伍,称为顺序文件. 除了顺序文件,还有索引文件.散列文件等,一般用于特殊领域, ...

  2. c语言实现指定路径文件读取_C语言实现文件复制功能(包括文本文件和二进制文件)...

    文件的复制是常用的功能,要求写一段代码,让用户输入要复制的文件以及新建的文件,然后对文件进行复制.能够复制的文件包括文本文件和二进制文件,你可以复制1G的电影,也可以复制1Byte的txt文档.实现文 ...

  3. 第十一章 文件操作_C语言fopen函数的用法,C语言打开文件详解

    在C语言中,操作文件之前必须先打开文件:所谓"打开文件",就是让程序和文件建立连接的过程. 打开文件之后,程序可以得到文件的相关信息,例如大小.类型.权限.创建者.更新时间等.在后 ...

  4. 第十一章 文件操作_C语言fscanf和fprintf函数的用法详解(格式化读写文件)

    fscanf() 和 fprintf() 函数与前面使用的 scanf() 和 printf() 功能相似,都是格式化读写函数,两者的区别在于 fscanf() 和 fprintf() 的读写对象不是 ...

  5. java 删 除文件操作,C语言 File文件处理 删除文件

    1.删除文件 要使用C语言删除文件,需要使用int remove(char *filename);方法,filename为要删除的文件名,可以为一目录.如果参数filename 为一文件,则调用unl ...

  6. c语言之文件操作,C语言之——文件操作模式

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47450667 "rt" 只读打开一个文本文件,只允许读数据 & ...

  7. linux c文件操作,C语言文件操作(FILE)与常用文件操作函数

    文件 1.文件基本概念 C程序把文件分为ASCII文件和二进制文件,ASCII文件又称文本文件,二进制文件和文本文件(也称ASCII码文件)二进制文件中,数值型数据是以二进制形式存储的, 而在文本文件 ...

  8. 使用文件操作函数实现:文件的复制功能。

    2019独角兽企业重金招聘Python工程师标准>>> //使用文件操作函数实现:文件的复制功能. #include <stdio.h> #include <std ...

  9. c语言程序头文件作用,C语言头文件

    C语言头文件教程 C 语言的头文件一般都是 .h 做为结尾的. C语言头文件详解 语法 #include 参数 参数 描述 filename 我们需要引入的头文件的名称. 说明 C 语言的头文件一般都 ...

最新文章

  1. MATLAB【六】 ———— matlab 随机散斑模拟
  2. 英特尔CEO:微软Windows 7是PC更新的催化剂
  3. C# HashTable的用法总结
  4. python 使用sqlite3
  5. python入门教程收藏_python入门教程:超详细保你1小时学会Python,快来收藏看看...
  6. C#的变迁史01 - C# 1.0篇
  7. PHP 判断客户端请求是 Android 还是 IOS
  8. 【操作系统】用户可通过三种方式使用计算机
  9. debian重启ssh服务_VScode链接服务器并配置公钥SSH Keys
  10. oracle-day1
  11. 云安全-Python实现凯撒密码和替换密码的加密解密与暴力破解
  12. 商业银行资产托管业务读书笔记
  13. wincc 写入mysql,WINCC读写SQL数据库的示例
  14. ESP8266_CH340G串口自动下载固件库原理
  15. U盘装系统教程,一键安装和U盘安装的区别
  16. C Primer Plus(第六版)第三章 数据和C
  17. 牛客网刷题day21
  18. 解题笔记(15)——几个栈和递归的问题
  19. 百度离线地图开发,node实现地图瓦片下载
  20. 【拓扑学知识】1.拓扑空间与度量拓扑

热门文章

  1. 下载和攻略补遗之人偶遗迹 ひとがたルイン
  2. 根据当前时间获取当前周的开始、结束时间(周一到周日)
  3. 爱国者P8880,完美展示!
  4. The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on .
  5. 对nand flash设备进行升级
  6. 黑马 - poi Excel
  7. 自制USB充电线、数据线、工程线、OTG线的方法
  8. ArcGIS字段计算器中的python函数(转发)
  9. perspective 3D 效果和动画配合
  10. 盘一盘那些提效/创意的宝藏网站