【zip-rs】Crate zip 复制项目路径
概述zipcrates.io 版本 | crates.io 下载量 | docs.rs 构建状态 | OpenSSF 最佳实践一个用于 Rust 的 ZIP 库支持简单 ZIP 文件的读取和写入。当前托管于 https://github.com/zip-rs/zip2。当前实现基于PKWARE 的 APPNOTE.TXT v6.3.9。支持的压缩格式格式读取写入Stored即无压缩✅✅Implode, Shrink, Reduce✅Deflate✅✅Deflate64✅Bzip2✅✅ZStandard✅✅LZMA✅XZ✅✅PPMd✅✅AES 加密✅✅ZipCrypto已弃用的加密✅✅当前不支持的 ZIP 扩展多磁盘Multi-diskFeature 特性可用的特性包括Feature说明aes-crypto启用对使用 AES 加密的文件的解密。支持 AE-1 和 AE-2 方法。deflate启用 deflate 压缩算法的压缩和解压实现可能在未来版本中更改这是 ZIP 文件的默认压缩方式。支持压缩级别 1…264。deflate-flate2与任何启用后端的flate2feature 标志结合使用以支持压缩级别 1…9 的 deflate 压缩。deflate-zopfli启用使用 zopfli 库进行 deflate 压缩当压缩级别为 10…264 时使用。这是最有效的 deflate 实现但也最慢。如果未同时启用 flate2则仅支持压缩而不支持解压。deflate64启用 deflate64 压缩算法。仅支持解压。lzma启用 LZMA 压缩算法。仅支持解压。bzip2启用 BZip2 压缩算法。ppmd启用 PPMd 压缩算法。time启用使用timecrate 的特性。chrono启用最后修改的zip::DateTime与chrono::NaiveDateTime之间的转换。jiff-02启用最后修改的zip::DateTime与jiff::civil::DateTime之间的转换。nt-time启用返回 NTFS 扩展字段中存储的时间戳为nt_time::FileTime。xz启用 XZ 压缩算法。zstd启用 Zstandard 压缩算法。默认启用的特性aes-crypto、bzip2、deflate、deflate64、lzma、ppmd、time、xz、zstd库的使用读取ZipArchive::new()写入ZipWriter::new()- 创建新归档ZipWriter::new_stream()- 以流模式写入示例查看examples目录了解如何将文件写入 ZIP如何将目录中的文件写入 ZIP使用walkdir如何解压 ZIP 文件如何从 ZIP 中解压单个文件如何从标准输入读取 ZIP如何将目录追加到现有归档WASM 支持该库可在 WASM 环境中运行但你可能需要禁用某些特性这些特性使用非 Rust 库。示例如下# 改为最新版本 zip { version latest, default-features false, features [ # aes-crypto, # bzip2, # xz, deflate64, deflate, lzma, time, zstd, ] }MSRV最低支持的 Rust 版本当前最低支持的 Rust 版本是1.88。在添加特性时我们将遵循以下准则我们始终支持已稳定至少 6 个月的次要 Rust 版本。MSRV 的任何变更都将伴随次版本号的提升。许可证根据 MIT 许可证授权。本仓库tests/data子目录中的某些文件遵循其他许可证详见名为LICENSE.*.txt的文件。Fuzzing模糊测试模糊测试通过cargo afl进行。安装cargo aflcargoinstallcargo-afl启动 ZIP 解压模糊测试mkdir-vpfuzz-read-outcargoafl build --manifest-pathfuzz/Cargo.toml --all-features-pfuzz_read# 策划的输入语料库cargoafl fuzz-ifuzz/read/in-ofuzz-read-out fuzz/target/debug/fuzz_read# 测试数据文件cargoafl fuzz-itests/data-ezip-ofuzz-read-out fuzz/target/debug/fuzz_read启动 ZIP 创建模糊测试mkdir-vpfuzz-write-outcargoafl build --manifest-pathfuzz/Cargo.toml --all-features-pfuzz_write# 策划的输入语料库和字典模式cargoafl fuzz-xfuzz/write/fuzz.dict-ifuzz/write/in-ofuzz-write-out fuzz/target/debug/fuzz_writeFuzzing 标准输入读取和写入的模糊测试器也可以通过标准输入接收输入进行一次性验证。注意可以配置模糊测试器是否支持 DEFLATE# 成功无输出cargorun --manifest-pathfuzz/Cargo.toml--quiet--all-features-pfuzz_readtests/data/deflate64.zip# 错误无 deflate64 支持cargorun --manifest-pathfuzz/Cargo.toml--quiet-pfuzz_readtests/data/deflate64.zipZIP 创建模糊测试器将尝试打印出它将输入字节转换成的输入类型的描述# 这是一个空输入案例fuzz/write/in/id-000000,time-0,execs-0,orig-0011743621118ab6c5278ffbb8fd14bddd8369ee.min\cargorun --manifest-pathfuzz/Cargo.toml--quiet--all-features-pfuzz_write# 此输入被转换为一个或多个测试用例fuzz/write/in/id-000000,time-0,execs-0,orig-0011743621118ab6c5278ffbb8fd14bddd8369ee.min\cargorun --manifest-pathfuzz/Cargo.toml--quiet-pfuzz_writeZIP 创建模糊测试器使用arbitrary::Unstructured将标准输入的字节转换为随机输入因此可以通过其他随机输入源触发# 通常随机输入被转换为零个测试用例head-c50/dev/random|cargorun --manifest-pathfuzz/Cargo.toml--quiet--all-features-pfuzz_write# 有时会生成一个或多个测试用例并成功评估head-c50/dev/random|cargorun --manifest-pathfuzz/Cargo.toml--quiet--all-features-pfuzz_write重新导出Re-exportspubusecrate::read::HasZipMetadata;pubusecrate::read::ZipArchive;pubusecrate::read::ZipReadOptions;pubusecrate::write::ZipWriter;pubuseextra_fields::ExtraField;模块Modules模块说明extra_fields扩展字段的类型read读取 ZIP 归档的类型result此库可能产生的错误类型unstable不稳定的 API。通过导入此模块可访问的所有 API 都是不稳定的它们可能在补丁版本中更改。你必须在 Cargo.toml 中使用精确版本说明符以指示你使用的此 API 的版本。write写入 ZIP 归档宏Macros宏说明to_and_from_le实现from_le()和to_le()为宏和方法提供字段规范。结构体Structs结构体说明DateTime时间点的表示。枚举Enums枚举说明AesModeAES 变体类型。AesSaltaes-crypto在加密 AES 文件时可使用的自定义盐替代随机生成的盐。不建议使用但对测试或可重复的加密结果有用。CompressionMethod标识 ZIP 归档中文件压缩的存储格式。System版本创建者中的系统高位字节。参考4.4.2.2常量Constants常量说明SUPPORTED_COMPRESSION_METHODS已实现的压缩方法。ZIP64_BYTES_THR需要 ZIP64 记录的文件大小阈值。ZIP64_ENTRY_THR需要分配 ZIP64 中心目录记录的单个 ZIP 中的条目数阈值。