4个版本

0.2.1 2022年11月24日
0.2.0 2021年7月25日
0.1.1 2021年2月25日
0.1.0 2021年2月22日

#181 in 压缩

Download history 1662/week @ 2024-03-25 1720/week @ 2024-04-01 1642/week @ 2024-04-08 1786/week @ 2024-04-15 1638/week @ 2024-04-22 1734/week @ 2024-04-29 1193/week @ 2024-05-06 1319/week @ 2024-05-13 1226/week @ 2024-05-20 1351/week @ 2024-05-27 1227/week @ 2024-06-03 1463/week @ 2024-06-10 1341/week @ 2024-06-17 1294/week @ 2024-06-24 1198/week @ 2024-07-01 1237/week @ 2024-07-08

5,175 monthly downloads
用于 18 个crate(直接使用3个)

MIT 许可协议

41KB
594

Rust的ZIP结构crate(zip_structs)

CI (master) CI (Release) zip_structs at crates.io zip_structs at docs.rs

此crate处理ZIP文件中的结构。

  • 中心目录结束(EOCD)结构
  • 中心目录结构
  • 本地文件头结构
    • 数据描述符结构

安装

将以下行添加到您的[dependencies]中。

zip_structs = "^0.2"

API的破坏性更改计划在未来实施。因此,强烈建议使用此版本格式。

从ZIP归档的EOCD结构解析的基本用法

use std::io::BufReader;
use std::fs::File;
use oem_cp::decode_string_complete_table;
use oem_cp::code_table::DECODING_TABLE_CP437;

use zip_structs::zip_central_directory::ZipCDEntry;
use zip_structs::zip_eocd::ZipEOCD;
use zip_structs::zip_local_file_header::ZipLocalFileHeader;

let mut zip_file = BufReader(File::open("path/to/archive.zip")?);

let eocd = ZipEOCD::from_reader(&mut zip_file)?;
let cd_list = ZipCDEntry::all_from_eocd(&mut zip_file, &eocd)?;

// Show file names in the ZIP archive
for cd in &cd_list {
    println!(
        "{}",
        if cd.is_encoded_in_utf8() {
            String::from_utf8_lossy(&cd.file_name_raw);
        } else {
            decode_string_complete_table(&cd.file_name_raw, DECODING_TABLE_CP437)
        }
    );
    let local_file_header = ZipLocalFileHeader::from_central_directory(&mut zip_file, &cd)?;
    do_something(&local_file_header);
}

竞争性库

有一些库提供了更抽象和更高层次的API。

  • zip
  • rc-zip

这些库不处理中心目录和本地文件头中的通用目的位标志。《rc-zip》无法处理非UTF-8编码的文件名。

  • vfs-zip

此库提供虚拟文件系统,而不是ZIP归档中的结构。

ZIP64支持

此库尚未支持ZIP64。

许可证

MIT

见LICENSE

依赖项

~0.4–1MB
~21K SLoC