ZipArchive

一个用于读取和编辑 zip 压缩文件的库。

概述

Zip 压缩文件是一种用于整理、压缩和加密文件集合的标准方法。它们被广泛用于将文件聚合、压缩和加密到单个可互操作的容器中。ZipArchive 提供对从内存或磁盘读取和写入 zip 压缩文件的支持。

读取 Zip 压缩文件

要解析存储在磁盘上的 zip 压缩文件,请使用函数 ZipArchiveReader.withFile(_:process:)。这将创建一个 ZipArchiveReader,它可以在提供的闭包中使用,以从 zip 文件读取目录,然后读取单个文件。

let fileContents = try ZipArchiveReader.withFile("MyFile.zip") { reader in
    let directory = try reader.readDirectory()
    let fileHeader = directory.first { $0.filename == "File.txt"}
    return try reader.readFile(fileHeader)
}

写入 Zip 压缩文件

ZipArchiveWriter 用于写入 zip 压缩文件。 你可以使用 ZipArchiveWriter.withFile(_:options:process:) 来创建新的 zip 压缩文件或将文件追加到现有的 zip 压缩文件。 此函数有一个闭包参数,你可以在其中使用提供的 ZipArchiveWriter 将新文件添加到 zip 文件。 当你退出闭包时,zip 压缩文件将被完成,即目录和目录结尾部分将被写入磁盘,并且文件描述符将被关闭。 以下代码加载 zip 压缩文件 MyFile.zip,然后将一个名为 Hello.txt 的新文件追加到该压缩文件中。

try ZipArchiveWriter.withFile("MyFile.zip") { writer in
    try writer.writeFile(filename: "Hello.txt", contents: .init("Hello, world!".utf8))
}

如果要创建新的 zip 压缩文件,可以调用 withFile("MyFile.zip", options: .create)

密码保护的 Zip 压缩文件

ZipArchive 支持传统的 PKZIP 加密方法。 你可以通过将密码参数添加到 ZipArchiveReader.readFile(_:password:) 来解密文件。 例如

try reader.readFile(fileHeader, password: "testing123")

你可以通过将密码添加到 ZipArchiveWriter.writeFile(filename:contents:password:) 来为文件添加加密。 例如

try writer.writeFile(filename: "Hello.txt", contents: fileContents, password: "testing123")

Zip 压缩文件内存缓冲区

也可以使用 ZipArchiveReaderZipArchiveWriter 从存储在内存中的 zip 压缩文件读取和写入数据。 可以从内存缓冲区构建 ZipArchiveReader,然后以类似于磁盘上存储的压缩文件的方式读取其目录和文件。

let reader = try ZipFileReader(buffer: zipArchiveMemoryBuffer)
let directory = try reader.readDirectory()
let fileHeader = directory.first { $0.filename == "File.txt"}
let fileContents = try reader.readFile(fileHeader)

要写入内存中的 zip 压缩文件,可以从缓冲区创建 ZipFileWriter。 当你想使用完整的目录创建最终的 zip 压缩文件时,可以调用 ZipFileWriter.finalizeBuffer(),它将返回完整的 zip 压缩文件。

let writer = try ZipArchiveWriter(buffer: zipArchiveMemoryBuffer)
try writer.writeFile(filename: "Hello.txt", contents: fileContents, password: "testing123")
let zipBuffer = try writer.finalizeBuffer()

状态

ZipArchive 目前支持

ZipArchive 支持 Apple OSs、Linux 和 Windows