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

时间:2015-04-05 15:18:04

标签: c file-copying

我正在编写一个包装器来帮助我完成未来的项目(我完成了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打开文件,它们并不相似。我做错了什么?

1 个答案:

答案 0 :(得分:3)

问题出在GetFileSize函数中,您将文件指针移动到结尾,但您再也不会rewind到达开头。

这意味着您的fread函数调用实际上不会读取任何内容,因为指针已经位于文件的末尾。所以写的是分配的内存的内容,这是不确定的(并且看起来是随机的)。

如果您检查了fread返回的内容,您会立即看到这一点。

这是一个关于总是检查可能以某种方式失败的函数的返回值的教训。