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 压缩
5,175 monthly downloads
用于 18 个crate(直接使用3个)
41KB
594 行
Rust的ZIP结构crate(zip_structs)
此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
依赖项
~0.4–1MB
~21K SLoC