【发布时间】:2012-11-08 14:50:10
【问题描述】:
我目前在循环中使用fgetc() 来读取整个文件。
但我需要在此循环的两次迭代中检测EOF。
我知道 EOF 无法使用 ungetc() 返回到流。
如何使用
fseek(file, -1, SEEK_CUR)
在EOF 之前使用fseek 并再次阅读它是否安全且便携?
谢谢。
【问题讨论】:
我目前在循环中使用fgetc() 来读取整个文件。
但我需要在此循环的两次迭代中检测EOF。
我知道 EOF 无法使用 ungetc() 返回到流。
如何使用
fseek(file, -1, SEEK_CUR)
在EOF 之前使用fseek 并再次阅读它是否安全且便携?
谢谢。
【问题讨论】:
你可以使用
fseek(file, 0, SEEK_END)
如果您尝试从中读取,您将获得第二个 EOF。
编辑:
更仔细地阅读参考资料:“允许库实现无意义地支持 SEEK_END(因此,使用它的代码没有真正的标准可移植性)。”
我猜你的解决方案在可移植性方面是最好的。
请注意 fseek(作为注释,因为我相信这不是您的情况):Using fseek to backtrack
【讨论】:
在大多数操作系统上,EOF 不是文件中存在的物理字符。 fgetc() 返回的只是一个虚拟的“带外”字符,表示没有更多输入。
您为什么需要再次获取EOF?文件中没有更多数据了,那么“备份”再次到达文件末尾有什么意义?
【讨论】: