Erlo

通过文件IO进行文件复制

2025-08-05 22:29:01 发布   31 浏览  
页面报错/反馈
收藏 点赞

利用标准 IO 函数接口实现文件拷贝,把本地磁盘的文件 A 中的数据完整的拷贝到另
一个文本 B 中,如果文本 B 不存在则创建,要求文本 A 的名称和文本 B 的名称通过命令行
传递,并进行验证是否正确。linux 上进行验证:
屏幕截图 2025-08-05 221846


/****************************************************************************
 *
 * 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 
#include 
#include 
//用户缓冲区大小
#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 invaildn" );
		exit(1);
	}
	//打开文件,并进行错误处理
	FILE * src_fp = fopen(argv[1],"rb");//argv[1]表示传入的第一个文件
	if (NULL == src_fp)
	{
		printf("file %s is errorn",argv[1] );
		exit(1);
	}
	FILE * tg_fp = fopen(argv[2],"wb");
	if (NULL == tg_fp)
	{
		printf("file %s is errorn",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;
}

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认