README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈
minizip-ng
minizip-ng 是一个用 C 语言编写的 zip 操作库,支持 Windows、macOS 和 Linux。
由 Nathan Moinvaziri 开发和维护。
分支
| 名称 | 描述 |
|---|---|
| develop | 最新的开发代码。 |
| master | 最近的稳定版本。 |
| 1.2 | 对原始 minizip 的旧版更改,包括 WinZip AES 加密、磁盘分割、I/O 缓冲以及一些额外的修复。与原始 minizip 不兼容 ABI。 |
| 1.1 | 截至 zlib 1.2.11 的原始 minizip。 |
历史
Minizip 最初由 Gilles Vollant 于 1998 年开发。它从 zlib 1.1.2 版本开始,作为额外的代码贡献首次包含在 zlib 发行版中。自那以后,它得到了持续改进,并有许多人做出了贡献。原始的 项目 仍然可以在由 Mark Adler 维护的 zlib 发行版中找到。
创建此仓库的动机是,原始库在很长一段时间内未得到维护,因此需要新功能和对原始库的 bug 修复。代码已进行了大规模的重新架构和重写,以帮助提高可维护性和可读性。已为原始 minizip 库的使用者提供了兼容性层。
特性
- 创建和提取 zip 归档。
- 向 zip 归档中添加和删除条目。
- 读取和写入原始 zip 条目数据。
- 从内存中读取和写入 zip 归档。
- 支持使用 ZIP64 扩展的大文件。
- Zlib、BZIP2、LZMA、PPMD、XZ 和 ZSTD 压缩方法。
- 通过传统 PKWARE 和 WinZIP AES 加密实现密码保护。
- 缓冲流式处理以提升 I/O 性能。
- 支持 NTFS 时间戳,包括 UTC 最后修改时间、最后访问时间和创建时间。
- 支持磁盘分割,可将 zip 归档分割为多个文件。
- 跨文件系统保留文件属性。
- 跟踪并存储符号链接。
- 通过 UTF-8 编码支持 Unicode 文件名。
- 支持传统字符编码 CP437、CP932、CP936、CP950。
- 关闭压缩、解压缩或加密的编译。
- 支持 Windows (Win32 & WinRT)、macOS 和 Linux 平台。
- 流式接口,便于实现其他平台。
- 支持 Apple 的压缩库 ZLIB 和 XZ 实现。
- 将本地文件头信息清零。
- 压缩/解压缩中央目录以减小体积。
- 如果中央目录损坏或缺失,则恢复中央目录。
- minizip 和 minigzip 命令行工具示例。
构建
要为您的平台生成项目文件:
- 下载并安装 cmake(建议版本 3.11 或更高)。
- 在 minizip 目录中运行 cmake。
cmake -S . -B build -D MZ_BUILD_TESTS=ON
cmake --build build
构建选项
| 名称 | 描述 | 默认值 |
|---|---|---|
| MZ_COMPAT | 启用兼容性层 | ON |
| MZ_ZLIB | 启用 ZLIB 压缩 | ON |
| MZ_ZLIB_FLAVOR | 选择 ZLIB 实现 (auto, zlib-ng, zlib) | auto |
| MZ_BZIP2 | 启用 BZIP2 压缩 | ON |
| MZ_LZMA | 启用 LZMA & XZ 压缩 | ON |
| MZ_PPMD | 启用 PPMD 压缩 | ON |
| MZ_ZSTD | 启用 ZSTD 压缩 | ON |
| MZ_LIBCOMP | 启用 Apple 压缩 | APPLE |
| MZ_FETCH_LIBS | 启用在未找到时获取第三方库 | WIN32 |
| MZ_FORCE_FETCH_LIBS | 启用始终获取第三方库 | OFF |
| MZ_PKCRYPT | 启用 PKWARE 传统加密 | ON |
| MZ_WZAES | 启用 WinZIP AES 加密 | ON |
| MZ_OPENSSL | 启用 OpenSSL 加密 | UNIX |
| MZ_LIBBSD | 使用 libbsd 加密随机数构建 | UNIX |
| MZ_ICONV | 启用 iconv 编码转换 | ON |
| MZ_ICU | 启用 ICU 编码转换 | OFF |
| MZ_COMPRESS_ONLY | 仅支持压缩 | OFF |
| MZ_DECOMPRESS_ONLY | 仅支持解压缩 | OFF |
| MZ_FILE32_API | 使用 posix 32 位文件 API 构建 | OFF |
| MZ_BUILD_TESTS | 构建 minizip 测试可执行文件 | OFF |
| MZ_BUILD_UNIT_TESTS | 构建 minizip 单元测试项目 | OFF |
| MZ_BUILD_FUZZ_TESTS | 构建 minizip 模糊测试可执行文件 | OFF |
| MZ_CODE_COVERAGE | 使用代码覆盖率标志构建 | OFF |
| MZ_SANITIZER | 使用代码检查器构建(Memory, Thread, Address, Undefined) | OFF |
| MZ_LIB_SUFFIX | 用于打包的库名称后缀 |
第三方库
根据所选的 CMake 选项,可能需要第三方库。如果系统已安装该库,则直接使用;否则,当启用 MZ_FETCH_LIBS 选项时,CMake 将从其官方 git 仓库获取该库的源代码并编译集成。
| 项目 | 许可证 | CMake 选项 | 备注 |
|---|---|---|---|
| bzip2 | license | MZ_BZIP2 | 由 Julian Seward 编写。 |
| liblzma | 公共领域 | MZ_LZMA | 由 Igor Pavlov 和 Lasse Collin 编写。 |
| ppmd | 公共领域 | MZ_PPMD | 由 Igor Pavlov 编写。 |
| zlib | zlib | MZ_ZLIB | 由 Mark Adler 和 Jean-loup Gailly 编写。或者,使用 Hans Kristian Rosbach 的 zlib-ng。 |
| zstd | BSD | MZ_ZSTD | 由 Facebook 编写。 |
本项目使用 zlib license。
致谢
感谢所有花时间贡献代码审查、测试和/或补丁的人员。没有你们,本项目不会如此出色。
感谢 Gilles Vollant,本工作最初基于其成果。
ZIP 格式由 PKWARE 的 Phil Katz 定义。