为什么这种复制文件的方式不起作用

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 值的课程。