#archive #data #pna #crypto #codec #fs-file

libpna

PNA(可移植网络归档)解码和编码库

30个版本 (17个重大更新)

新增 0.17.1 2024年8月14日
0.16.0 2024年8月2日
0.15.0 2024年7月27日
0.8.1 2024年3月18日
0.0.0-alpha.1 2023年3月7日

#490 in 数据结构

Download history 253/week @ 2024-04-26 225/week @ 2024-05-03 241/week @ 2024-05-10 59/week @ 2024-05-17 93/week @ 2024-05-24 33/week @ 2024-05-31 229/week @ 2024-06-07 263/week @ 2024-06-14 251/week @ 2024-06-21 124/week @ 2024-06-28 437/week @ 2024-07-05 74/week @ 2024-07-12 117/week @ 2024-07-19 319/week @ 2024-07-26 190/week @ 2024-08-02 412/week @ 2024-08-09

每月1,058次下载
3个Crates中使用(通过pna

Apache-2.0 OR MIT

250KB
6K SLoC

libpna

test Crates.io

Rust的pna归档读写库。

# Cargo.toml
[dependencies]
libpna = "0.17"

读取归档

use libpna::{Archive, ReadOptions};
use std::fs::File;
use std::io::{self, copy, prelude::*};

fn main() -> io::Result<()> {
    let file = File::open("foo.pna")?;
    let mut archive = Archive::read_header(file)?;
    for entry in archive.entries_skip_solid() {
        let entry = entry?;
        let mut file = File::create(entry.header().path().as_path())?;
        let mut reader = entry.reader(ReadOptions::builder().build())?;
        copy(&mut reader, &mut file)?;
    }
    Ok(())
}

写入归档

use libpna::{Archive, EntryBuilder, WriteOptions};
use std::fs::File;
use std::io::{self, prelude::*};

fn main() -> io::Result<()> {
    let file = File::create("foo.pna")?;
    let mut archive = Archive::write_header(file)?;
    let mut entry_builder = EntryBuilder::new_file(
        "bar.txt".into(),
        WriteOptions::builder().build(),
    )?;
    entry_builder.write(b"content")?;
    let entry = entry_builder.build()?;
    archive.add_entry(entry)?;
    archive.finalize()?;
    Ok(())
}

许可证

本项目许可采用以下其中之一:

任选其一。

贡献

除非你明确声明,否则根据Apache-2.0许可证定义,你提交的任何有意包含在本项目中的贡献,将如上双重许可,不附加任何额外条款或条件。

依赖项

~9MB
~163K SLoC