我无法弄清楚如何读取文件的内容,然后将更多数据附加到文件中。我现在使用的hGetContents
似乎在阅读后关闭了文件,因此我无法写信。
我该如何解决这个问题?
答案 0 :(得分:1)
可能是这样的:
import System.IO
modifyFile :: FilePath -> (String -> String) -> IO ()
modifyFile fn func = do
str <- readFile fn
length str `seq` return ()
appendFile fn (func str)
seq调用强制完全读取文件并关闭文件,然后再重新打开它(或写入失败)。
这很快又脏。如果您想做更精细的事情,可以查看System.IO.hSeek和相关函数。例如。打开它,读它,寻找到底,追加。
答案 1 :(得分:0)
您不应该获取该文件的内容。
适当的做法是打开文件,编辑和关闭。 getContent方法为您获取内容而不执行任何其他操作。
伪代码::
打开文件
读取/附加文件(视情况而定)
关闭文件
这是doc http://haskell.org/ghc/docs/latest/html/libraries/base/System-IO.html
答案 2 :(得分:0)
hGetContents
关闭(或者更确切地说,半关闭)文件句柄是正确的,因此您不能再将其用于其他操作。一种选择是在读取文件后获取该文件的新句柄,然后使用该句柄进行追加,但如果由于某种原因在重新打开文件内部之前没有完全处理文件内容,则可能会以意想不到的方式工作。 / p>
另一种方法是在ReadWriteMode
中打开文件并以其他方式阅读内容,例如,使用hGetLine
(如果您的数据是基于行的),直到您到达结尾-file然后使用相同的句柄追加。