#decompression #7z #delta-compression #7zip #sevenz

sevenz-rust

A 7z decompressor/compressor written in pure rust

26 releases

0.6.1 Jul 17, 2024
0.5.4 Dec 14, 2023
0.5.3 Sep 29, 2023
0.4.3 Jun 16, 2023
0.1.5 Nov 2, 2022

#29 in Compression

Download history 2805/week @ 2024-07-27 2719/week @ 2024-08-03 2997/week @ 2024-08-10 2984/week @ 2024-08-17 3311/week @ 2024-08-24 4318/week @ 2024-08-31 3646/week @ 2024-09-07 3642/week @ 2024-09-14 3372/week @ 2024-09-21 3350/week @ 2024-09-28 3378/week @ 2024-10-05 3221/week @ 2024-10-12 2909/week @ 2024-10-19 3292/week @ 2024-10-26 3021/week @ 2024-11-02 2993/week @ 2024-11-09

12,798 downloads per month
Used in 25 crates (20 directly)

Apache-2.0

695KB
9K SLoC

Contains (DOS exe, 370KB) tests/resources/decompress_x86.exe

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

Decompression

Supported codecs:

  • BZIP2 (require feature 'bzip2')
  • COPY
  • LZMA
  • LZMA2
  • ZSTD (require 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.2"}

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

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

Decompress a encrypted 7z file

Add 'aes256' feature

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

Multi-thread decompress

check examples/mt_decompress

Compression

Currently only support LZMA2 method.

[dependencies]
sevenz-rust={version="0.5.0", features=["compress"]}

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

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

With AES encryption

require version>=0.3.0

[dependencies]
sevenz-rust={version="0.5", features=["compress","aes256"]}

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

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

Advance

[dependencies]
sevenz-rust={version="0.5.0", features=["compress","aes256"]}

Solid compression

use sevenz_rust::*;

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_rust::*;

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");

Changelog

Dependencies

~1.8–9.5MB
~92K SLoC