使用该库,我想从 ZIP 存档zip-conduit
中提取单个文件(例如)。bar/foo.txt
hackage 的示例仅显示如何一次提取所有文件。如何仅提取单个文件或文件列表?
注意:这个问题是使用问答方式回答的,因此故意不显示任何研究工作!
使用该库,我想从 ZIP 存档zip-conduit
中提取单个文件(例如)。bar/foo.txt
hackage 的示例仅显示如何一次提取所有文件。如何仅提取单个文件或文件列表?
注意:这个问题是使用问答方式回答的,因此故意不显示任何研究工作!
官方示例适用extractFiles
于[FilePath]
as 返回的fileNames
. 您可以简单地将其应用于自定义文件名列表:
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"
CB.sinkFile
您可以使用任何其他导管水槽来代替使用。