#zip-archive #zip #archive #tokio #async-io #async

async_zip

异步 ZIP 存档读取/写入crate

16 个版本

0.0.17 2024 年 4 月 3 日
0.0.16 2023 年 12 月 22 日
0.0.15 2023 年 4 月 30 日
0.0.13 2023 年 3 月 26 日
0.0.3 2021 年 10 月 21 日

#23 in 异步

Download history 10793/week @ 2024-04-23 11588/week @ 2024-04-30 11793/week @ 2024-05-07 14903/week @ 2024-05-14 13723/week @ 2024-05-21 12346/week @ 2024-05-28 14065/week @ 2024-06-04 13134/week @ 2024-06-11 11775/week @ 2024-06-18 12004/week @ 2024-06-25 11149/week @ 2024-07-02 12966/week @ 2024-07-09 12058/week @ 2024-07-16 13648/week @ 2024-07-23 15769/week @ 2024-07-30 16255/week @ 2024-08-06

59,855 每月下载量
49 个 crates (35 直接) 中使用

MIT 许可证

270KB
3.5K SLoC

async_zip

Crates.io Crates.io docs.rs GitHub Workflow Status (branch) GitHub

异步 ZIP 存档读取/写入crate。

特性

  • 基于 futures 的 IO 特性的基础实现。
  • 基于 tokio 的 IO 特性的扩展实现。
  • 支持存储、Deflate、bzip2、LZMA、zstd 和 xz 压缩方法。
  • 各种不同的读取方法(seek、stream、文件系统、内存缓冲区等)。
  • 支持使用数据描述符写入完整数据(u8 slices)或流。
  • 对 ZIP64 读取和写入的初始支持。
  • 旨在实现合理的 规范 兼容性。

安装 & 基本用法

[dependencies]
async_zip = { version = "0.0.17", features = ["full"] }

/examples 目录下可以找到(即将到来的)详尽的示例列表。

特性标志

  • full - 启用所有以下特性。
  • full-wasm - 启用所有以下与 WASM 兼容的特性。
  • chrono - 启用通过 chrono 解析日期的支持。
  • tokio - 启用对 tokio 实现模块的支持。
  • tokio-fs - 启用对 tokio::fs 读取模块的支持。
  • deflate - 启用对 Deflate 压缩方法的支持。
  • bzip2 - 启用对 bzip2 压缩方法的支持。
  • lzma - 启用对 LZMA 压缩方法的支持。
  • zstd - 启用对 zstd 压缩方法的支持。
  • xz - 启用对 xz 压缩方法的支持。

读取

use tokio::{io::BufReader, fs::File};
use async_zip::tokio::read::seek::ZipFileReader;
...

let mut file = BufReader::new(File::open("./Archive.zip").await?);
let mut zip = ZipFileReader::with_tokio(&mut file).await?;

let mut string = String::new();
let mut reader = zip.reader_with_entry(0).await?;
reader.read_to_string_checked(&mut string).await?;

println!("{}", string);

写入

use async_zip::tokio::write::ZipFileWriter;
use async_zip::{Compression, ZipEntryBuilder};
use tokio::fs::File;
...

let mut file = File::create("foo.zip").await?;
let mut writer = ZipFileWriter::with_tokio(&mut file);

let data = b"This is an example file.";
let builder = ZipEntryBuilder::new("bar.txt".into(), Compression::Deflate);

writer.write_entry_whole(builder, data).await?;
writer.close().await?;

贡献

虽然我将继续维护这个 crate,但实现合理的规范兼容性对单个个人来说是一项巨大的任务。因此,贡献总是受到鼓励并受到赞赏。

没有贡献指南,但应考虑可读性,添加适当的注释,并使用 rustfmt

问题 & 支持

无论是想报告在使用此crate时遇到的问题,还是寻求一般性帮助/支持,请使用问题跟踪器,并尽可能提供详细信息(例如重现步骤)。

我会尽量在合理的时间内回应问题。

依赖关系

~0.7–9MB
~67K SLoC