【发布时间】:2011-05-17 11:02:48
【问题描述】:
当我尝试使用函数feof(FILE *) 确定文件结尾时,我发现它没有按预期工作:即使流确实结束了,也需要额外读取。例如feof(FILE*) 如果在读取 10 个字节后对具有 10 个字节数据的文件调用,则不会判断为真。我需要一个额外的读取操作,它当然返回 0,然后feof(FILE *) 会说“好的,现在你到了尽头。”
我的问题是,如果我不想要 feof 样式,为什么还需要一个 read 以及如何确定文件结尾或如何知道文件流中剩余多少字节?
感谢和最好的问候。
【问题讨论】:
-
把溪流想象成水龙头后面的水。当你想要一些东西时(一个字符:
getchar(),一行:fgets(),一堆数据:fread(),...)你打开水龙头,得到你想要的,然后关闭水龙头。如果它起作用了,您将无法知道是否还有更多的水;或者如果水龙头接下来会断开。如果失败,您可以确定为什么失败:因为没有足够的水(feof为真);或者因为水龙头坏了(ferror是真的)。