我正在尝试使用 native libcompression
库从 zip 文件内的 txt 文件获取 String
。实际上我使用的是
一开始,我在做:
let zip = try? Data(contentsOf: "/.../test.zip")
let tmp: Data? = zip?.unzip()
let txt: String? = String(data: tmp!, encoding: .utf8)
但是如何获取 zip 文件的内容以及如何从某些 txt 文件获取数据?
最佳答案
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)
})
关于Swift:解压缩文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51064483/