文件不会逐字节完全读取

File will not be completely read byte by byte

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

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 处停止?

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

fopen(in_filename, "rb");