-1

我正在尝试解决一个问题,该问题需要我读取一个文件并生成另一个文件,该文件与原始文件具有相同的内容,但每四个字节被删除。我尝试这样做......

int main()
{
  FILE *p;
  FILE *q;
  int i=0,k=0;
  char c;

  p = fopen("C:\\Users\\Teja\\Desktop\\Beethoven.raw","rw");
  q = fopen("C:\\Users\\Teja\\Desktop\\Beethoven_new.raw","w+");

  printf("%x is the EOF character \n",EOF);
  while((c=fgetc(p))!=EOF)
  {

     if(i==3){
      i=0;
      printf("Removing %x %d \n",c,k++);
     }
     else{
      printf("Putting %x %d \n",c,k++);
      fputc(c,q);
      i++;
     }
  }
  fclose(p);
  fclose(q);

  return 0;
}

我试图读取的文件是一个 .raw 文件,大小约为 10-15 MB。我注意到上面的代码通常在 88 个字节后停止读取文件。有什么方法可以读取大文件还是我做错了什么?

4

2 回答 2

2

除了已经指出的内容,关于打开文件的注意事项:听起来你的文件在二进制文件中,这意味着你必须b在模式字符串中添加一个。此外,rw它不是一种模式,因为您只读取p您想要的内容rb,并且您只写入q您想要的wbwb+

顺便说一句,您需要fgetc返回 int 的原因是因为fgetc必须返回 257 个唯一值:所有可能的值char,即0x00thru0xFF以及表示 EOF 的唯一值,通常-1

于 2012-10-07T17:28:58.937 回答
1

改变

char c;

int c;

因为fetgetc()的返回类型是 anint而不是char

于 2012-10-07T17:28:25.320 回答