Swift:解压缩文件

时间:2018-06-27 13:47:24

标签: swift zip

我正在尝试使用本地String库从zip文件中的txt文件中获取libcompression。实际上,我使用

中的代码

起初,我在做

let zip = try? Data(contentsOf: "/.../test.zip")    
let tmp: Data? = zip?.unzip()
let txt: String? = String(data: tmp!, encoding: .utf8)

但是如何获取zip文件的内容以及如何从某些txt文件获取数据?

1 个答案:

答案 0 :(得分:1)

ZIP Foundation支持访问ZIP存档中的各个条目。
您必须通过将文件URL传递到Archive初始化程序来初始化档案。
之后,您可以通过下标访问特定条目:

let fileManager = FileManager()
let currentWorkingPath = fileManager.currentDirectoryPath
var archiveURL = URL(fileURLWithPath: currentWorkingPath)
archiveURL.appendPathComponent("test.zip")
guard let archive = Archive(url: archiveURL, accessMode: .read) else  {
    return
}
guard let entry = archive["file.txt"] else {
    return
}
var destinationURL = URL(fileURLWithPath: currentWorkingPath)
destinationURL.appendPathComponent("out.txt")
do {
    try archive.extract(entry, to: destinationURL)
} catch {
    print("Extracting entry from archive failed with error:\(error)")
}

您还可以使用基于闭包的API直接访问entry的内容。这使您可以处理条目,而无需先将其写入文件系统:

try archive.extract(entry, consumer: { (data) in
    print(data.count)
})