📂 Swift 中用于压缩和解压缩文件的框架。
简单易用,快速上手。基于 Minizip 1.2 构建。
使用 SPM 字符串可以轻松地将依赖项包含在您的 Package.swift
文件中。
.package(url: "https://github.com/vapor-community/Zip.git", from: "2.2.0")
并将其添加到您的目标依赖项中
.product(name: "Zip", package: "zip")
Zip 支持 Swift 5.9 及更高版本支持的所有平台。
要在 Windows 上使用 Zip,您需要通过扩展标志将 zlib
的可用版本传递给构建。例如
swift build -Xcc -I'C:/pathTo/zlib/include' -Xlinker -L'C:/pathTo/zlib/lib'
使用 Zip 最简单的方法是通过快速函数。它们都使用本地文件路径作为 URL
,如果遇到错误则抛出,如果成功则返回目标 URL
。
import Zip
do {
let filePath = Bundle.main.url(forResource: "file", withExtension: "zip")!
let unzipDirectory = try Zip.quickUnzipFile(filePath)
let zipFilePath = try Zip.quickZipFiles([filePath], fileName: "archive")
} catch {
print("Something went wrong")
}
对于更高级的用法,Zip 具有允许您设置自定义目标路径、使用密码保护的 zip 文件以及使用进度处理闭包的函数。 这些函数如果出现错误会抛出,但不会返回。
import Zip
do {
let filePath = Bundle.main.url(forResource: "file", withExtension: "zip")!
let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
try Zip.unzipFile(filePath, destination: documentsDirectory, password: "password") { progress in
print(progress)
}
let zipFilePath = documentsFolder.appendingPathComponent("archive.zip")
try Zip.zipFiles([filePath], zipFilePath: zipFilePath, password: "password") { progress in
print(progress)
}
} catch {
print("Something went wrong")
}
Zip 提供了一种归档保存在内存中的数据的方法。 当您想创建一个 zip 压缩包,而无需将源文件保存到磁盘时,这非常有用。
import Zip
do {
let archiveFile = ArchiveFile(filename: "file.txt", data: "Hello, World!".data(using: .utf8)!)
let zipFilePath = FileManager.default.temporaryDirectory.appendingPathComponent("archive.zip")
try Zip.zipData(archiveFiles: [archiveFile], zipFilePath: zipFilePath)
} catch {
print("Something went wrong")
}
Zip 开箱即用地支持 .zip
和 .cbz
文件。 要支持其他 zip 衍生文件扩展名
Zip.addCustomFileExtension("file-extension-here")