avatar Documentation Team Chat MIT License Continuous Integration Swift 5.9+

📂 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 具有允许您设置自定义目标路径、使用密码保护的 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")