我考虑读取未知大小的文件,我知道在此期间不会改变大小。所以我打算使用fstat()
函数和struct stat
。现在我正在考虑st_size
字段的真正含义以及如何使用它。
如果我以这种方式获得文件大小,那么分配一个大小的缓冲区并准确读取该字节大小,似乎剩下一个字节。当我使用feof()
函数检查FILE *
中是否还有任何内容时,我得出了这个结论。它返回false!所以我需要阅读(st_size + 1)
并且只读取所有字节并且feof()
正常工作。我是否应该始终将此+1值添加到此大小以读取二进制文件中的所有字节,或者有一些隐藏的原因是这不是读取 EOF ?
struct stat finfo;
fstat(fileno(fp), &finfo);
data_length = finfo.st_size;
我问这个是因为当我添加+1
时,fread()
读取的字节数实际上是-1
字节更少,并且插入了最后一个字节{{1} }字节。我也可以在用00
检查之前做一些这样的事情
feof()
这是真正的代码,这有点奇怪:
fread(NULL, 1, 1, fp);
答案 0 :(得分:4)
这种行为很正常。
feof
只有在您尝试阅读超出文件结束时才会返回true,当您完全阅读文件大小时,您将不会这样做。