当未达到 EOF 时 feof() 返回 true

Dan*_*oof 2 c++ fopen feof

我正在尝试从特定偏移量的文件中读取(简化版本):

typedef unsigned char u8;
FILE *data_fp = fopen("C:\\some_file.dat", "r");
fseek(data_fp, 0x004d0a68, SEEK_SET); // move filepointer to offset
u8 *data = new u8[0x3F0];
fread(data, 0x3F0, 1, data_fp);
delete[] data;
fclose(data_fp);
Run Code Online (Sandbox Code Playgroud)

问题是,数据不会包含 1008 个字节,而是 529 个字节(看起来是随机的)。当达到 529 字节时,对 feof(data_fp) 的调用将开始返回 true。

我也尝试过读取较小的块(一次 8 个字节),但它看起来就像是在尚未到达 EOF 时那样。

在十六进制编辑器中简单查看一下就会发现还剩下很多字节

pmg*_*pmg 5

以文本模式打开文件(就像您所做的那样)会使库将某些文件内容转换为其他内容,可能会触发不必要的 EOF 或错误的偏移量计算。

通过将“b”选项传递给 fopen 调用以二进制模式打开文件

fopen(filename, "rb");
Run Code Online (Sandbox Code Playgroud)