在Haskell中,当你已经有一个打开的文件句柄并且不希望关闭它时,如何清除文件的内容? System.IO API有一些简单的方法对我来说不明显吗?
在限制较少的情况下,清除文件内容的最简单方法是使用writeFile awesomefile.txt ""
。如果您已经有awesomefile.txt
的打开文件句柄,那么writeFile
将失败并出现异常(即“openFile:资源忙(文件被锁定)”)。
我认为使用hSeek
将句柄设置回起始位置可能会产生类似的效果,但事实并非如此。在寻找回到开始的句柄之后,下一个hPutStr
调用将根据需要覆盖尽可能多的字节(无论如何都更符合逻辑意义)。
在我的程序中出现这种情况,我希望经常将信息写入文件以进行日志记录。只有最新的日志数据是相关的(并且巨大的文件非常不方便),因此在每次写入之前清空文件。因为写操作非常频繁,所以我只想打开一次文件句柄。