当我尝试使用函数feof(FILE *)
确定文件结尾时,我发现它无法正常工作:即使流结束也需要额外的读取。例如如果在读取10个字节后立即在具有10个字节数据的文件上调用feof(FILE*)
,则feof(FILE *)
将无效。我需要一个额外的读取操作,当然返回0,然后read
会说“好了,现在你到达终点。”
我的问题是为什么还需要一个feof
以及如何确定文件结尾或如何知道文件流中剩余的字节数,如果我不想要{{1}} - 样式?
谢谢和最诚挚的问候。
答案 0 :(得分:11)
不要使用feof()或任何变体 - 就这么简单。你希望它以某种方式预测下一次读取将失败,但这不是它的作用 - 它告诉你PREVIOUS读取的结果是什么。读取文件的正确方法是(伪代码):
while( read( file, buffer ) ) {
do something with buffer
}
换句话说,您需要测试读取操作的结果。对于C流和C ++ iostream都是如此。