确定流结束时EOF问题

当我尝试使用函数feof(FILE *)确定文件结尾时,我发现它不能像我预期的那样工作:即使流结束也需要额外的读取。 例如,如果在读取10个字节之后在具有10个字节数据的文件上调用,则feof(FILE*)将不会告诉true。 我需要一个额外的读取操作,当然返回0,然后feof(FILE *)会说“好的,现在你到达终点”。

我的问题是为什么还需要一个read以及如何确定文件结尾或如何知道文件流中剩余多少字节如果我不想要feof style?

谢谢和最诚挚的问候。

不要使用feof()或任何变体 – 就这么简单。 你希望它以某种方式预测下一次读取将失败,但这不是它的作用 – 它告诉你PREVIOUS读取的结果是什么。 读取文件的正确方法是(伪代码):

 while( read( file, buffer ) ) { do something with buffer } 

换句话说,您需要测试读取操作的结果。 这对于C流和C ++ iostream都是如此。