我正在写一个包装程序,以帮助我将来的项目(我完成了C书),并且想在不使用的情况下复制文件fgetc
。这是我的代码,它不起作用:
int CopyFile(char* filename, char* dest)
{
FILE* fp, *fout;
fp = fopen(filename,"rb");
//fout = fopen(dest, "wb");
if(fp == NULL)
{
return -1;
}
/*while((c = fgetc(fp)) != EOF)
{
fputc(c,fout);
}*/
long size = GetFileSize(fp);
printf("%lu", size);
char* file = malloc(size);
fread(file, size, 1, fp);
//fclose(fp);
fout = fopen(dest, "wb");
fwrite(file, size, 1, fout);
fclose(fp);
fclose(fout);
return 0;
}
我什至用hexeditor打开文件,它们也不相似。我究竟做错了什么?
问题出在GetFileSize
函数中,在该函数中您将文件指针移到末尾,但是您再也不会倒退到开头。
这意味着您的fread
函数调用实际上不会读取任何内容,因为指针已经位于文件末尾。因此,所写的是分配的内存的内容,该内容是不确定的(并且似乎是随机的)。
如果您检查了fread
返回的内容,则将立即看到。
让这成为始终检查可能以一种或另一种方式失败的函数的返回值的课程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句