void hugefile(char *filename1, char *filename2){
//第一一个读取的文件长度
int buflen1 =0;
int len2;
//首先在定义一个文件句柄,用于操作文件
FILE *fp=NULL, *fp2=NULL;
//打开文件
fp = fopen(filename1, "rb");
//读数据
unsigned char buf[1024];
//打开目的文件
fp2 = fopen(filename2, "wb");
while(!feof(fp)){//当文件没有到达末尾时,就继续循环
buflen1 = fread(buf, 1, 1024, fp);
//由于不知道当前设定的一次读取的大小是否超过文件或者文件剩余的大小,因此在读完一次后需要继续判断是否到达文件末尾
if(feof(fp)){
break;
}
//当没有到达文件末尾时,就说明取出的文件大小刚好是1024,然后就直接写入文件2
len2 = fwrite(buf, 1, buflen1, fp2);
//这里也要检查检测磁盘是否已满
if(len2!=buflen1){
printf("检查磁盘是否已满");
//当写入失败时,需要释放内存
goto END;
return;
}
}
//处理小文件,当while结束时,读取的数据一定是小于等于1024字节的,因此需要把这一部分写入文件2
len2 = fwrite(buf, 1, buflen1, fp2);
//在检查写入的大小(返回值)和实际要写入的大小是否相同,用于检测磁盘是否已满
if(len2!=buflen1){
printf("检查磁盘是否已满");
//当写入失败时,需要释放内存
goto END;
return;
}
END:
//释放内存
if(fp!=NULL){
fclose(fp);
}
if(fp2!=NULL){
fclose(fp2);
}
}
不太理解的是在使用fwrite和fread时将上面的代码替换成:
buflen1 = fread(buf, 1024, 1, fp);
len2 = fwrite(buf, buflen1, 1, fp2);
就会失败,有知道的吗?求解!谢谢!