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

#include #include int copyFile(char *fileRead, char *fileWrite);int main(){    char fileRead[100];  // 要复制的文件名    char fileWrite[100];  // 复制后的文件名       // 获取用户输入    printf("要复制的文件:");    scanf("%s", fileRead);    printf("将文件复制到:");    scanf("%s", fileWrite);    // 进行复制操作    if( copyFile(fileRead, fileWrite) ){        printf("恭喜你,文件复制成功!\n");    }else{        printf("文件复制失败!\n");    }    return 0;}/*** 文件复制函数* @param    fileRead    要复制的文件* @param    fileWrite   复制后文件的保存路径* @return   int         1: 复制成功;2: 复制失败**/int copyFile(char *fileRead, char *fileWrite){    FILE *fpRead;  // 指向要复制的文件    FILE *fpWrite;  // 指向复制后的文件    int bufferLen = 1024*4;  // 缓冲区长度    char *buffer = (char*)malloc(bufferLen);  // 开辟缓存    int readCount;  // 实际读取的字节数    if( (fpRead=fopen(fileRead, "rb")) == NULL || (fpWrite=fopen(fileWrite, "wb")) == NULL ){        printf("Cannot open file, press any key to exit!\n");        getch();        exit(1);    }    // 不断从fileRead读取内容,放在缓冲区,再将缓冲区的内容写入fileWrite    while( (readCount=fread(buffer, 1, bufferLen, fpRead)) > 0 ){        fwrite(buffer, readCount, 1, fpWrite);    }    free(buffer);    fclose(fpRead);    fclose(fpWrite);    return 1;}

运行结果:

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

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

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

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

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

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

  3. 机械优化黄金分割法c语言编程,黄金分割法_机械优化设计_C语言程序.doc

    黄金分割法_机械优化设计_C语言程序黄金分割法_机械优化设计_C语言程序 黄金分割法的优化设计 实验报告 学院:机电工程 机制自动化11-03班 学号:541102010326 姓名:刘点点 1,黄金 ...

  4. python读取dat数据_dat文件读写_c语言读写dat文件_c语言读dat文件 - 云+社区 - 腾讯云...

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 13 }文件读写:写入目录的获取比较麻烦,各个平台不同,所以用c++自己的文件读 ...

  5. c语言创造的文件保存路径_c语言怎么把变量写入文件路径

    1. c语言 如何将变量写入文件 比如写入 c盘下面的test.txt文件中. #include #include void main(void) { char achBuf[256]; memset ...

  6. c语言创造的文件保存路径_C语言 如何创建文件到指定文件夹

    展开全部 C语言创建新文件可用fopen()函数的"w"(写)方式打开文件,即可.如果文件存在,将会清空现有的文32313133353236313431303231363533e5 ...

  7. file是c语言自带的数据类型吗_C语言详解 FILE文件操作

    1. 需要了解的概念 需要理解的知识点包括:数据流.缓冲区.文件类型.文件存取方式 1.1 数据流: 指程序与数据的交互是以流的形式进行的.进行C语言文件的存取时,都会先进行"打开文件&qu ...

  8. 易语言多级指针读取_C语言指针难吗?纸老虎而已,纯干货讲解(附代码)

    作者:21IC网络整理,排版:晓宇 微信公众号:芯片之家(ID:chiphome-dy) 指针对于C来说太重要.然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方 ...

  9. c语言 fgets函数 去除换行符_C语言文件的打开和关闭

    文件代表一系列的字节.C语言提供了标准库函数用于文件的打开和关闭. 1.文件的打开 打开文件的操作通过标准库函数 fopen 完成,该函数定义如下: FILE *fopen( const char * ...

最新文章

  1. 性能进阶:使用JMeter进行websocket测试
  2. 【Python】检测字符串的方法
  3. exe电子书转换txt 下载_网站能经常看到的主流电子书格式
  4. Debian Buster Nginx 布署 Brophp 项目(类 Thinkphp)
  5. ETL学习之八:添加日志记录
  6. ubuntu安装Nvidia-docker2详细步骤
  7. 三种实例化bean方式——Spring对bean的管理(一)
  8. 使用wireshark抓包分析实战
  9. python微信语音转发方法_最全的微信语音转发方法,最简单的方式大家已经帮你选出来了...
  10. Java 实体对象转Map
  11. 远程控制计算机显示为什么不能满屏,win7远程桌面不能全屏显示怎么办-处理win7远程桌面不能全屏显示的方法 - 河东软件园...
  12. 关于Enterprise library logging中一个没搞明白的东西,希望有大大们进来帮忙释疑一下, THKS...
  13. VMware安装win10镜像
  14. 按当前位置与其它位置远近排序,按经纬度计算
  15. c语言 快排,C语言 快排函数
  16. lhgdialog弹出框组件 参数详解(自己曾经开发的fuzz项目中用到过)
  17. 2022-2028全球与中国纳米保湿美容仪市场现状及未来发展趋势
  18. python 类 子类 初始化 super
  19. q群机器人php,机器人自动审核入群验证php源码
  20. python通过代理发送邮件_python发送邮件

热门文章

  1. C++中构造函数调用构造函数
  2. 通过RunLoop监听主线程的卡顿
  3. xcode上真机调试iphone4s出现“There was an internal API error.”解决方案
  4. 我爱淘二次冲刺阶段1
  5. Ext.ux.form.SearchField使用方法
  6. 刚刚学Asp.Net的人要告诉的几件事
  7. 写有效率的SQL查询(IV)
  8. NClay.MVC是MVP?
  9. 美团外卖分布式系统架构设计
  10. 程序员必备基础:如何安全传输存储用户密码?