利用标准 IO 函数接口实现文件拷贝,把本地磁盘的文件 A 中的数据完整的拷贝到另
一个文本 B 中,如果文本 B 不存在则创建,要求文本 A 的名称和文本 B 的名称通过命令行
传递,并进行验证是否正确。linux 上进行验证:
- /****************************************************************************
- *
- * file name: 2025-07-28_filecopy.c
- * author : 15515376695@163.com
- * date : 2025-07-28
- * function : 该程序实现把一个文件的数据拷贝到一个指定文件
- * note : None
- * CopyRight (c) 2025 15515376695@163.com Right Reseverd
- *
- ****************************************************************************/
- #include <stdio.h>
- #include <strings.h>
- #include <stdlib.h>
- //用户缓冲区大小
- #define BUFFERSIZE 512
- int main(int argc, char const *argv[])
- {
- int loop_cnt = 0;//记录循环次数
- int remainder = 0;//记录余数
- int src_size = 0;//记录源文件大小
- //判断
- if (3 != argc)//加上自身文件一共有三个文件
- {
- printf("arument is invaild\n" );
- exit(1);
- }
- //打开文件,并进行错误处理
- FILE * src_fp = fopen(argv[1],"rb");//argv[1]表示传入的第一个文件
- if (NULL == src_fp)
- {
- printf("file %s is error\n",argv[1] );
- exit(1);
- }
- FILE * tg_fp = fopen(argv[2],"wb");
- if (NULL == tg_fp)
- {
- printf("file %s is error\n",argv[2] );//argv[2]表示传入的第二个文件
- exit(1);
- }
- //建立缓冲区,用空间换时间
- char buffer[BUFFERSIZE] = {0};
- //进行光标偏移,来获取源文件大小
- fseek(src_fp,0,SEEK_END);
- src_size = ftell(src_fp);
- fseek(src_fp,0,SEEK_SET);
- printf("file size is %d \n",src_size);
- //计算需要循环写入的次数
- loop_cnt = src_size/BUFFERSIZE;
- //计算余数
- remainder = src_size%BUFFERSIZE;
- //进行循环向目标文件写入
- while(loop_cnt--)
- {
- //从待拷贝文件中读取数据
- fread(buffer,BUFFERSIZE,1,src_fp);
- //向目标文件中写入数据
- fwrite(buffer,BUFFERSIZE,1,tg_fp);
- }
- if (remainder > 0)//将循环写入数据后剩余的数据继续进行写入
- {
- //提前清空数据缓存区
- bzero(buffer,BUFFERSIZE);
- //从待拷贝文件中读取数据
- fread(buffer,remainder,1,src_fp);
- //向目标文件中写入数据
- fwrite(buffer,remainder,1,tg_fp);
- }
- //输出目标文件的大小
- printf("%s is %ld \n",argv[2],ftell(tg_fp) );
- //分别关闭两个文件
- fclose(src_fp);
- fclose(tg_fp);
- return 0;
- }
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |