1个不稳定版本
0.1.0 | 2023年11月28日 |
---|
#329 在 压缩
用于 orphist
35KB
782 行
synthzip
这是什么?
一个Rust库,当你有ZIP数据并且有本地文件头(LFH),但没有中央目录文件头(CDFH)或结束中央目录(EOCD)数据时,它可以构建合成中央目录。
这是一个相对小众的库。你可能不需要它(直接),除非你正在做一些不寻常的事情。但如果你确实需要,它可能正是你做那件怪异事情所需要的。
如何获取这个强大的工具?
在你的项目目录中运行以下Cargo命令(假设你已经安装了cargo-edit)
cargo add synthzip
或者将以下行添加到你的Cargo.toml
(在[dependencies]
数组中)
synthzip = "^ 0.1"
如何使用它?
fn main() {
// This can be any source that implements Read + Seek, and reads a valid ZIP
// Local File Header, compressed data, and (optional) trailing Data Descriptor.
let mut input = std::io::Cursor::new(Vec::new());
// read the data into an entry.
let entry = synthzip::Entry::read(&mut input).expect("failed to read zip entry from input");
// create a new (empty) CentralDirectory
let mut index = synthzip::CentralDirectory::new();
// add the Entry to the CentralDirectory. This will create a corresponding ZIP
// Central Directory File Header and update the End of Central Directory appropriately.
index.add(&entry)
// this can be any destination that implements Write + Seek.
let mut output = std::fs::File::create("/path/for/output.zip").expect("failed to create output file");
// write the entry to the output destination.
entry.write(&mut output).expect("failed to write zip entry to output");
// write the Central Directory after the entry data.
index.write(&mut output).expect("failed to write central directory to output");
/// flush the output, if you're so inclined.
output.flush().unwrap();
}
许可证
synthzip
遵循MIT许可证。请参阅LICENSE.txt
获取全文。
虽然许可证很短,但它仍然是用律师语言写的。如果你更喜欢更接地气的话,可以考虑以下
依赖项
~0.7–1.2MB
~26K SLoC