通过文件IO进行文件复制
利用标准 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) 202515515376695@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,"rb");//argv表示传入的第一个文件
if (NULL == src_fp)
{
printf("file %s is error\n",argv );
exit(1);
}
FILE * tg_fp = fopen(argv,"wb");
if (NULL == tg_fp)
{
printf("file %s is error\n",argv );//argv表示传入的第二个文件
exit(1);
}
//建立缓冲区,用空间换时间
char buffer = {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,ftell(tg_fp) );
//分别关闭两个文件
fclose(src_fp);
fclose(tg_fp);
return 0;
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]