#file-header #central #zip-archive #local-file #data #synthetic #construct

synthzip

在ZIP数据中缺少Central Directory时构建合成Central Directory

1个不稳定版本

0.1.0 2023年11月28日

#329压缩


用于 orphist

MIT 许可证

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获取全文。

虽然许可证很短,但它仍然是用律师语言写的。如果你更喜欢更接地气的话,可以考虑以下

  • tl;drLegal提供了一个简单的视觉摘要,可在这里找到。
  • FOSSA提供了一个更深入的概述,可在这里找到。

依赖项

~0.7–1.2MB
~26K SLoC