【问题标题】:Extracting single file from zip archive using Haskell使用 Haskell 从 zip 存档中提取单个文件
【发布时间】:2014-08-26 01:59:07
【问题描述】:

使用 zip-conduit 库,我想从 ZIP 存档中提取单个文件(例如 bar/foo.txt)。

关于 hackage 的示例仅显示如何一次提取所有文件。如何仅提取单个文件或文件列表?

注意:这个问题是用问答方式回答的,因此故意不显示任何研究工作!

【问题讨论】:

    标签: haskell zip zip-conduit


    【解决方案1】:

    官方示例将extractFiles 应用于fileNames 返回的[FilePath]。您可以简单地将其应用于自定义文件名列表:

    import Codec.Archive.Zip (withArchive, extractFiles)
    import System.Environment (getArgs)
    
    main = do
        -- ZIP file name: First commandline arg
        zipPath:_ <- getArgs
        withArchive zipPath $
            extractFiles ["bar/foo.txt"] "."
    

    此代码将在当前工作目录中创建一个文件夹bar,并将文件foo.txt 提取到该文件夹​​中。如果任何这样的文件已经存在,它将被覆盖。

    如果您打算解压到自定义文件名(例如,您想将foo.txt 解压到当前工作目录,而不是bar 文件夹),则需要使用如下示例所示的管道:

    import Codec.Archive.Zip (withArchive, sourceEntry)
    import System.Environment (getArgs)
    import qualified Data.Conduit.Binary as CB
    
    main = do
        -- ZIP file name: First commandline arg
        zipPath:_ <- getArgs
        withArchive zipPath $
            sourceEntry "bar/foo.txt" $ CB.sinkFile "foo.txt"
    

    您可以使用任何其他conduit 接收器来代替CB.sinkFile

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      相关资源
      最近更新 更多