第十一章 文件操作_C语言实现文件复制功能(包括文本文件和二进制文件)
文件的复制是常用的功能,要求写一段代码,让用户输入要复制的文件以及新建的文件,然后对文件进行复制。能够复制的文件包括文本文件和二进制文件,你可以复制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语言实现文件复制功能(包括文本文件和二进制文件)相关推荐
- 第十一章 文件操作_C语言插入、删除、更改文件内容
我们平时所见的文件,例如 txt.doc.mp4 等,文件内容是按照从头到尾的顺序依次存储在磁盘上的,就像排起一条长长的队伍,称为顺序文件. 除了顺序文件,还有索引文件.散列文件等,一般用于特殊领域, ...
- c语言实现指定路径文件读取_C语言实现文件复制功能(包括文本文件和二进制文件)...
文件的复制是常用的功能,要求写一段代码,让用户输入要复制的文件以及新建的文件,然后对文件进行复制.能够复制的文件包括文本文件和二进制文件,你可以复制1G的电影,也可以复制1Byte的txt文档.实现文 ...
- 第十一章 文件操作_C语言fopen函数的用法,C语言打开文件详解
在C语言中,操作文件之前必须先打开文件:所谓"打开文件",就是让程序和文件建立连接的过程. 打开文件之后,程序可以得到文件的相关信息,例如大小.类型.权限.创建者.更新时间等.在后 ...
- 第十一章 文件操作_C语言fscanf和fprintf函数的用法详解(格式化读写文件)
fscanf() 和 fprintf() 函数与前面使用的 scanf() 和 printf() 功能相似,都是格式化读写函数,两者的区别在于 fscanf() 和 fprintf() 的读写对象不是 ...
- java 删 除文件操作,C语言 File文件处理 删除文件
1.删除文件 要使用C语言删除文件,需要使用int remove(char *filename);方法,filename为要删除的文件名,可以为一目录.如果参数filename 为一文件,则调用unl ...
- c语言之文件操作,C语言之——文件操作模式
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47450667 "rt" 只读打开一个文本文件,只允许读数据 & ...
- linux c文件操作,C语言文件操作(FILE)与常用文件操作函数
文件 1.文件基本概念 C程序把文件分为ASCII文件和二进制文件,ASCII文件又称文本文件,二进制文件和文本文件(也称ASCII码文件)二进制文件中,数值型数据是以二进制形式存储的, 而在文本文件 ...
- 使用文件操作函数实现:文件的复制功能。
2019独角兽企业重金招聘Python工程师标准>>> //使用文件操作函数实现:文件的复制功能. #include <stdio.h> #include <std ...
- c语言程序头文件作用,C语言头文件
C语言头文件教程 C 语言的头文件一般都是 .h 做为结尾的. C语言头文件详解 语法 #include 参数 参数 描述 filename 我们需要引入的头文件的名称. 说明 C 语言的头文件一般都 ...
最新文章
- MATLAB【六】 ———— matlab 随机散斑模拟
- 英特尔CEO:微软Windows 7是PC更新的催化剂
- C# HashTable的用法总结
- python 使用sqlite3
- python入门教程收藏_python入门教程:超详细保你1小时学会Python,快来收藏看看...
- C#的变迁史01 - C# 1.0篇
- PHP 判断客户端请求是 Android 还是 IOS
- 【操作系统】用户可通过三种方式使用计算机
- debian重启ssh服务_VScode链接服务器并配置公钥SSH Keys
- oracle-day1
- 云安全-Python实现凯撒密码和替换密码的加密解密与暴力破解
- 商业银行资产托管业务读书笔记
- wincc 写入mysql,WINCC读写SQL数据库的示例
- ESP8266_CH340G串口自动下载固件库原理
- U盘装系统教程,一键安装和U盘安装的区别
- C Primer Plus(第六版)第三章 数据和C
- 牛客网刷题day21
- 解题笔记(15)——几个栈和递归的问题
- 百度离线地图开发,node实现地图瓦片下载
- 【拓扑学知识】1.拓扑空间与度量拓扑
热门文章
- 下载和攻略补遗之人偶遗迹 ひとがたルイン
- 根据当前时间获取当前周的开始、结束时间(周一到周日)
- 爱国者P8880,完美展示!
- The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on .
- 对nand flash设备进行升级
- 黑马 - poi Excel
- 自制USB充电线、数据线、工程线、OTG线的方法
- ArcGIS字段计算器中的python函数(转发)
- perspective 3D 效果和动画配合
- 盘一盘那些提效/创意的宝藏网站