是否可以从存档中提取目录条目?怎么做呢?
从压缩文件中提取一个文件.txt的代码。
let fileManager = FileManager()
let currentWorkingPath = fileManager.currentDirectoryPath
var archiveURL = URL(fileURLWithPath: currentWorkingPath)
archiveURL.appendPathComponent("archive.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)")
}
如果我使用zip文件的子目录路径作为条目,我可以提取该目录及其所有内容吗?
ZIP归档文件不存储条目的父子关系。归档文件是一个平坦的条目列表,它有一个 "父子关系"。path
属性。因为档案是以列表的形式组织的--而不是以树的形式组织的--所以没有有效的方法来获得子树。
在ZIP基金会中。Archive
符合 Sequence
. 所以你可以使用 filter
来查找具有特定路径前缀的所有条目,例如。
let entries = archive.filter { $0.path.starts(with: "Test/") }
然后您可以遍历所有符合条件的条目,并使用 extract
您的问题中的代码。不过也有一些边缘情况需要考虑。
FileManager.createDirectory(...)
在提取过程中。.directory
条目。最好的方法是,"按需 "创建目录层次结构。(例如,如果遇到一个条目的父路径还不存在,你就创建它)