本文发布于59 天前,其中的信息可能已经过时,如有错误请发送邮件到supper@vcclient.xyz
/*************************************************************************
*
* func name :
* function : 利用标准IO函数接口实现文件拷贝,把本地磁盘的文件A中的数据完整的拷贝到另一个文本B中,
* 如果文本B不存在则创建,要求文本A的名称和文本B的名称通过命令行传递,并进行验证是否正确。
* argument : None
* return value : None
* authof : wzy
* data : 2026/4/16
* note : 一个一个字符的拷贝:以时间换空间
*
************************************************************************/
#if 0
int main(int argc, char const *argv[])
{
if (argc != 3)
{
printf("errof");
exit(1);
}
FILE* FileA = fopen(argv[1],"rb");
if (NULL == FileA)
{
perror("errorA");
exit(1);
}
FILE* FileB = fopen(argv[2],"wb+");
if (NULL == FileB)
{
perror("errorA");
exit(1);
}
int ch;
while((ch=fgetc(FileA))!=EOF)
{
fputc(ch,FileB);
}
fclose(FileA);
fclose(FileB);
return 0;
}
#endif
/*************************************************************************
*
* func name :
* function : 利用标准IO函数接口实现文件拷贝,把本地磁盘的文件A中的数据完整的拷贝到另一个文本B中,
* 如果文本B不存在则创建,要求文本A的名称和文本B的名称通过命令行传递,并进行验证是否正确。
* argument : None
* return value : None
* authof : wzy
* data : 2026/4/16
* note : 以数据块拷贝:以空间换时间
*
************************************************************************/
#if 0
#define BUFFERSIZE 512
int main(int argc, char const *argv[])
{
int A_size = 0; //记录待拷贝文件的大小
int loop_cnt = 0; //记录循环次数
int remainder = 0; //记录余数
if (argc != 3)
{
printf("errof");
exit(1);
}
//2.打开待拷贝文件和目标文件
FILE* FileA = fopen(argv[1],"rb");
if (NULL == FileA)
{
perror("errorA");
exit(1);
}
FILE* FileB = fopen(argv[2],"wb+");
if (NULL == FileB)
{
perror("errorA");
exit(1);
}
//3.为了提高程序的运行效率,采用空间换时间的思想,定义数据缓冲区来存储文件数据
char data_buffer[BUFFERSIZE] = {0};
fseek(FileA,0,SEEK_END);//偏移待拷贝文件的光标位置到末尾
A_size = ftell(FileA);//记录待拷贝文件的大小
fseek(FileA,0,SEEK_SET);//偏移待拷贝文件的光标位置到开头
printf("A_size = %d\n",A_size);
//4.计算需要读取数据的次数,循环写入到目标文件即可
loop_cnt = A_size / BUFFERSIZE;//记录需要循环的次数
remainder = A_size % BUFFERSIZE;
if (loop_cnt > 1)
{
while(loop_cnt--)
{
//读取待拷贝文件的数据
fread(data_buffer,BUFFERSIZE,1,FileA);
//向目标文件中写入数据块
fwrite(data_buffer,BUFFERSIZE,1,FileB);
}
}
if(remainder>0)
{
//提前清空数据缓冲区
bzero(data_buffer,BUFFERSIZE);
//读取待拷贝文件的数据
fread(data_buffer,remainder,1,FileA);
//向目标文件中写入数据块
fwrite(data_buffer,remainder,1,FileB);
}
//验证拷贝是否完成,统计目标文件的数量
printf("B_size = %ld\n",ftell(FileB));
fclose(FileA);
fclose(FileB);
return 0;
}
#endif