我有一段很小的原始代码来阅读一个文件--尽管文件的内容是从另一个应用程序附加的--它是Linux实用程序less。它工作正常,但如果读者达到EOF,“EOF”标志的文件设置。然后对文件的任何其他读取操作都会导致空读取/文件大小不变(hFileSize
,hTell
)。解决方案是调用clearerr或rewind--我想它们会清除EOF标志。如何在Haskell中实现?如果有某种方法,是否可以以跨平台的方式实现(如果不是跨平台的话)?
PS.目前我重新打开文件,但我认为,永久重新开放期间投票,与1-2秒的时间也许不是那么好的主意,如果有更好的解决方案.
1条答案
按热度按时间58wvjzkj1#
在Haskell中,您可以使用System.IO模块来处理文件和管理文件句柄。要清除EOF标志并重置文件指针,可以使用hSeek函数。此函数允许您将文件句柄的位置设置为给定的偏移量。
以下是如何在Haskell中清除EOF标志并重置文件指针:
字符串
在上面的代码中,我们定义了resetFileHandle函数,它接受一个文件句柄(Handle)作为参数。hSeek函数用于将文件句柄的位置设置为文件的开头(AbsoluteSeek 0),从而有效地清除EOF标志。
但是,请注意,此解决方案假设在您阅读文件时,该文件没有被其他进程修改。如果文件不断地被另一个应用程序追加,并且您希望在新内容到达时读取新内容,则在每次轮询时重新打开文件可能是一种更好的方法。
如果你想要一个跨平台的解决方案,使用hSeek通常可以跨不同的平台移植。但是,请注意,文件处理和行为可能会因操作系统而异,因此在目标平台上彻底测试代码总是一个好主意。