c++ 确定流结束时EOF问题

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

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

谢谢和最诚挚的问候.

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

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

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

https://stackoverflow.com/questions/6029875/problem-with-eof-when-determine-stream-end

转载注明原文:c++ 确定流结束时EOF问题