C使用fstat()读取文件

时间:2016-10-06 12:42:18

标签: c file

我考虑读取未知大小的文件,我知道在此期间不会改变大小。所以我打算使用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);

1 个答案:

答案 0 :(得分:4)

这种行为很正常。

feof只有在您尝试阅读超出文件结束时才会返回true,当您完全阅读文件大小时,您将不会这样做。