找回密码
 立即注册
首页 业界区 安全 通过文件IO进行文件复制

通过文件IO进行文件复制

敖雨燕 9 小时前
利用标准 IO 函数接口实现文件拷贝,把本地磁盘的文件 A 中的数据完整的拷贝到另
一个文本 B 中,如果文本 B 不存在则创建,要求文本 A 的名称和文本 B 的名称通过命令行
传递,并进行验证是否正确。linux 上进行验证:
1.png
  1. /****************************************************************************
  2. *
  3. * file name: 2025-07-28_filecopy.c
  4. * author   : 15515376695@163.com
  5. * date     : 2025-07-28
  6. * function : 该程序实现把一个文件的数据拷贝到一个指定文件
  7. * note     : None
  8. * CopyRight (c)   2025  15515376695@163.com   Right Reseverd
  9. *
  10. ****************************************************************************/
  11. #include <stdio.h>
  12. #include <strings.h>
  13. #include <stdlib.h>
  14. //用户缓冲区大小
  15. #define BUFFERSIZE 512
  16. int main(int argc, char const *argv[])
  17. {
  18.         int loop_cnt = 0;//记录循环次数
  19.         int remainder = 0;//记录余数
  20.         int src_size = 0;//记录源文件大小
  21.         //判断
  22.         if (3 != argc)//加上自身文件一共有三个文件
  23.         {
  24.                 printf("arument is invaild\n" );
  25.                 exit(1);
  26.         }
  27.         //打开文件,并进行错误处理
  28.         FILE * src_fp = fopen(argv[1],"rb");//argv[1]表示传入的第一个文件
  29.         if (NULL == src_fp)
  30.         {
  31.                 printf("file %s is error\n",argv[1] );
  32.                 exit(1);
  33.         }
  34.         FILE * tg_fp = fopen(argv[2],"wb");
  35.         if (NULL == tg_fp)
  36.         {
  37.                 printf("file %s is error\n",argv[2] );//argv[2]表示传入的第二个文件
  38.                 exit(1);
  39.         }
  40.         //建立缓冲区,用空间换时间
  41.         char buffer[BUFFERSIZE] = {0};
  42.         //进行光标偏移,来获取源文件大小
  43.         fseek(src_fp,0,SEEK_END);
  44.         src_size = ftell(src_fp);
  45.         fseek(src_fp,0,SEEK_SET);
  46.         printf("file size is %d \n",src_size);
  47.     //计算需要循环写入的次数
  48.     loop_cnt = src_size/BUFFERSIZE;
  49.     //计算余数
  50.     remainder = src_size%BUFFERSIZE;
  51.     //进行循环向目标文件写入
  52.     while(loop_cnt--)
  53.     {
  54.             //从待拷贝文件中读取数据
  55.             fread(buffer,BUFFERSIZE,1,src_fp);
  56.             //向目标文件中写入数据
  57.             fwrite(buffer,BUFFERSIZE,1,tg_fp);
  58.     }
  59.     if (remainder > 0)//将循环写入数据后剩余的数据继续进行写入
  60.     {
  61.             //提前清空数据缓存区
  62.             bzero(buffer,BUFFERSIZE);
  63.             //从待拷贝文件中读取数据
  64.             fread(buffer,remainder,1,src_fp);
  65.             //向目标文件中写入数据
  66.             fwrite(buffer,remainder,1,tg_fp);
  67.     }
  68.     //输出目标文件的大小
  69.     printf("%s is %ld \n",argv[2],ftell(tg_fp) );
  70.     //分别关闭两个文件
  71.     fclose(src_fp);
  72.     fclose(tg_fp);
  73.     return 0;
  74. }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册