确定流结束时EOF问题

时间:2011-05-17 11:02:49

标签: c++ c io eof

当我尝试使用函数feof(FILE *)确定文件结尾时,我发现它无法正常工作:即使流结束也需要额外的读取。例如如果在读取10个字节后立即在具有10个字节数据的文件上调用feof(FILE*),则feof(FILE *)将无效。我需要一个额外的读取操作,当然返回0,然后read会说“好了,现在你到达终点。”

我的问题是为什么还需要一个feof以及如何确定文件结尾或如何知道文件流中剩余的字节数,如果我不想要{{1}} - 样式?

谢谢和最诚挚的问候。

1 个答案:

答案 0 :(得分:11)

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

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

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