Swift:解压缩文件

标签 swift zip

我正在尝试使用 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/

相关文章:

ios - phpMyAdmin plus iPhone 版应用程序 格式

swift - 我正在尝试从 Magical Records 获取最新添加的数据

django - 如何在 Django 中获取上传的 zip 文件并保存其内容(mp3 文件)?

c# - 如何在 Xamarin for Android 中压缩文件?

Linux解压保存大小写?

ios - 带有overlayskscene Xcode Swift 的屏幕触摸Scenekit 导致应用程序崩溃

regex - 如何获取仅用于一个域的验证电子邮件地址的正则表达式?

ios - View 的颜色和导航栏的颜色

coldfusion - 如何使用 cfzip 重命名文件?

php - 压缩存档: `failed to open stream: Is a directory`