为什么这种复制文件的方式不起作用
Why this way of copying files isn't working
我正在编写一个包装器来帮助我将来的项目(我完成了 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;
}
我什至用十六进制编辑器打开文件,但它们并不相似。我做错了什么?
问题出在 GetFileSize
函数中,您将文件指针移动到末尾,但您再也不会 rewind 到开头。
这意味着您的 fread
函数调用实际上不会读取任何内容,因为指针已经位于文件末尾。所以写入的是分配内存的内容,这是不确定的(并且看起来是随机的)。
如果您检查了 fread
return 编辑的内容,您会立即看到它。
让这成为一堂关于始终检查可能以某种方式失败的函数的 return 值的课程。
我正在编写一个包装器来帮助我将来的项目(我完成了 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;
}
我什至用十六进制编辑器打开文件,但它们并不相似。我做错了什么?
问题出在 GetFileSize
函数中,您将文件指针移动到末尾,但您再也不会 rewind 到开头。
这意味着您的 fread
函数调用实际上不会读取任何内容,因为指针已经位于文件末尾。所以写入的是分配内存的内容,这是不确定的(并且看起来是随机的)。
如果您检查了 fread
return 编辑的内容,您会立即看到它。
让这成为一堂关于始终检查可能以某种方式失败的函数的 return 值的课程。