通过文件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) 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;
}
作者:一二三一二一原文地址:https://www.cnblogs.com/MMXXLL/p/19024192

%s 个评论

要回复文章请先登录注册