ITADN
zlib-ng/minizip-ng
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

minizip-ng

minizip-ng 是一个用 C 语言编写的 zip 操作库,支持 Windows、macOS 和 Linux。

Master Branch Status Fuzzing Status License: Zlib codecov.io Packaging status

由 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 命令行工具示例。

构建

要为您的平台生成项目文件:

  1. 下载并安装 cmake(建议版本 3.11 或更高)。
  2. 在 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 选项备注
bzip2licenseMZ_BZIP2由 Julian Seward 编写。
liblzma公共领域MZ_LZMA由 Igor Pavlov 和 Lasse Collin 编写。
ppmd公共领域MZ_PPMD由 Igor Pavlov 编写。
zlibzlibMZ_ZLIB由 Mark Adler 和 Jean-loup Gailly 编写。或者,使用 Hans Kristian Rosbach 的 zlib-ng
zstdBSDMZ_ZSTD由 Facebook 编写。

本项目使用 zlib license

致谢

感谢所有花时间贡献代码审查、测试和/或补丁的人员。没有你们,本项目不会如此出色。

感谢 Gilles Vollant,本工作最初基于其成果。

ZIP 格式由 PKWARE 的 Phil Katz 定义。