我正在编写一个包装器来帮助我完成未来的项目(我完成了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打开文件,它们并不相似。我做错了什么?
答案 0 :(得分:3)
问题出在GetFileSize
函数中,您将文件指针移动到结尾,但您再也不会rewind到达开头。
这意味着您的fread
函数调用实际上不会读取任何内容,因为指针已经位于文件的末尾。所以写的是分配的内存的内容,这是不确定的(并且看起来是随机的)。
如果您检查了fread
返回的内容,您会立即看到这一点。
这是一个关于总是检查可能以某种方式失败的函数的返回值的教训。