【发布时间】:2011-05-11 07:09:02
【问题描述】:
我有以下功能:
safeWrite :: Text -> IO ()
safeWrite c = bracket (openTempFile "/tmp" "list.tmp")
(\(path, h) -> hClose h
>> copyFile path dataFile
>> removeFile path)
(\(_, h) -> TI.hPutStr h c)
我的印象是这样是安全的,如果任何时候出现错误都不会发生复制,并且原始文件仍然可以使用。然而就在昨天,我得到了一个空文件,我不知道去哪里看它。该程序已经运行了一个多月,没有任何问题,这表明我没有想到一些极端情况。
该方法是否保证原子性,这意味着错误在其他地方,或者如果没有,为什么不呢?我应该怎么做才能保证原子性?
【问题讨论】:
标签: file haskell io temporary-files