文件不会被逐字节完全读取

时间:2015-01-20 10:08:42

标签: c file-io

使用C程序我在Dev-C ++中编写,我想逐字节读取二进制文件。由于某种原因,读取停止在261个字节。这是一个简化的代码,它重现了bavior。

int main(int argc, char *argv[])
{
   FILE *in_fp;
   char in_filename[25] = "data.raw";
   in_fp = fopen(in_filename,"r");
   if( in_fp == NULL ) {
      perror("Error while opening the input file.\n");
      system("PAUSE");
      exit(EXIT_FAILURE);
   }

   int readcnt = 0;
   while (1) {
      unsigned char buffer;
      if (fread(&buffer, sizeof(unsigned char), 1, in_fp) == 0) {
         printf("read eof after %d\n", readcnt);
         break;
      } else {
         printf("read = %d\n", buffer);
      }
      readcnt++;
   }


   fclose(in_fp);

   return 0;
}

文件data.raw的大小为104 KiB。

上述程序的输出结束于:

...
read = 255
read = 4
read = 204
read eof after 260

使用十六进制编辑器,我可以找到字节FF 04 CC,之后应该有字节,因为文件不在最后:FF 04 CC 1A 1F C5 8A

我还尝试了fgetc()feof(),行为也一样。

为什么读数在偏移260处停止?

1 个答案:

答案 0 :(得分:4)

您可能需要在"binary mode"中打开文件:

fopen(in_filename, "rb");