我想从目录的内容使用Codec.Archive.Tar
创建一个tar文件,但是我也想在创建tar文件后清理目录。下面是这证明了我的问题一个小例子:该目录太早被删除
import System.Directory
import qualified Codec.Archive.Tar as T
listFile = do createDirectory "dir"
createDirectory "dir/dir2"
tarfile <- fmap T.write $ T.pack "dir" ["dir2"]
removeDirectoryRecursive "dir"
return tarfile
当我调用该函数listFile
例如从ghci的范围内,我回来
"*** Exception: dir/dir2: getModificationTime:getFileTimes:getFileStatus: does not exist (No such file or directory)
,我猜是由tar文件所引起的懒洋洋产生的目录,严格清理。因此该目录在tar文件实际创建之前被删除。
首先,我是否正确地分析了为什么这是失败?如果是这样,我能做些什么来解决这个问题?我不想严格生成tar文件,因为它可能相当大,我不想将它全部存储在内存中。什么是“惯用”的方式来延迟删除目录,直到生成tar文件?
“我不想严格生成tar文件,因为它可能是相当大的,我不希望这一切存储在记忆。”你是否试图将tar文件写入磁盘?你可能正在寻找一个合适的流库(管道,管道,流,io流等等),可能有人已经在流接口中包装了tar操作 – jberryman
我的确想象其中一个库可以解决这个问题,但是我需要花一些时间阅读所有文档并了解正在发生的事情。这有点令人困惑,以前从未在Haskell中处理过流式处理。 –