sevenz-rust2 0.7.0

A 7z decompressor/compressor written in pure Rust
Documentation

Crate Documentation

This project is a 7z compressor/decompressor written in pure Rust.

And it's very much inspired by the apache commons-compress project.

The LZMA/LZMA2 decoder and all filters code was ported from tukaani xz for java

This is a fork of the original, unmaintained sevenz-rust crate to continue the development and maintenance.

Decompression

Supported codecs:

  • BZIP2 (requires feature 'bzip2')
  • COPY
  • LZMA
  • LZMA2
  • ZSTD (requires feature 'zstd')

Supported filters:

  • BCJ X86
  • BCJ PPC
  • BCJ IA64
  • BCJ ARM
  • BCJ ARM_THUMB
  • BCJ SPARC
  • DELTA
  • BJC2

Usage

[dependencies]
sevenz-rust = { version = "0.7" }

Decompress source file "data/sample.7z" to destination path "data/sample":

sevenz_rust2::decompress_file("data/sample.7z", "data/sample").expect("complete");

Decompress an encrypted 7z file

Add the 'aes256' feature:

[dependencies]
sevenz-rust2 = { version = "0.7", features = ["aes256"] }
sevenz_rust2::decompress_file_with_password("path/to/encrypted.7z", "path/to/output", "password".into()).expect("complete");

Multi-thread decompress

Please check examples/mt_decompress

Compression

Currently, this crate only supports the LZMA2 compression algorithm.

[dependencies]
sevenz-rust2 = { version = "0.7", features = ["compress"] }

Use the helper function to create a 7z file with source path:

sevenz_rust2::compress_to_path("examples/data/sample", "examples/data/sample.7z").expect("compress ok");

With AES encryption

[dependencies]
sevenz-rust2 = { version = "0.7", features = ["compress", "aes256"] }

Use the helper function to create a 7z file with source path and password:

sevenz_rust2::compress_to_path_encrypted("examples/data/sample", "examples/data/sample.7z", "password".into()).expect("compress ok");

Advance

[dependencies]
sevenz-rust2 = { version = "0.7", features = ["compress", "aes256"] }

Solid compression

use sevenz_rust2::*;

let mut sz = SevenZWriter::create("dest.7z").expect("create writer ok");
sz.push_source_path("path/to/compress", | _ | true).expect("pack ok");
sz.finish().expect("compress ok");

Compression methods

With encryption and lzma2 options:

use sevenz_rust2::*;

let mut sz = SevenZWriter::create("dest.7z").expect("create writer ok");
sz.set_content_methods(vec![
    sevenz_rust::AesEncoderOptions::new("sevenz-rust".into()).into(),
    lzma::LZMA2Options::with_preset(9).into(),
]);
sz.push_source_path("path/to/compress", | _ | true).expect("pack ok");
sz.finish().expect("compress ok");

Licence

Licensed under the Apache License, Version 2.0.