6 releases (breaking)
new 0.12.0 | Feb 28, 2025 |
---|---|
0.11.0 | Feb 26, 2025 |
0.10.0 | Feb 26, 2025 |
0.9.0 | Feb 25, 2025 |
0.7.0 | Feb 24, 2025 |
#89 in Compression
279 downloads per month
555KB
6K
SLoC
Contains (DOS exe, 370KB) tests/resources/decompress_x86.exe
This project is a 7z compressor/decompressor written in pure Rust.
This is a fork of the original, unmaintained sevenz-rust crate to continue the development and maintenance.
Supported Codecs & filters
Codec | Decompression | Compression |
---|---|---|
COPY | ✓ | ✓ |
LZMA | ✓ | ✓ |
LZMA2 | ✓ | ✓ |
BROTLI (*) | ✓ | ✓ |
BZIP2 (*) | ✓ | ✓ |
DEFLATE (*) | ✓ | ✓ |
PPMD (*) | ✓ | ✓ |
LZ4 (*) | ✓ | ✓ |
ZSTD (*) | ✓ | ✓ |
(*) Require optional cargo feature.
Filter | Decompression | Compression |
---|---|---|
BCJ X86 | ✓ | |
BCJ PPC | ✓ | |
BCJ IA64 | ✓ | |
BCJ ARM | ✓ | |
BCJ ARM_THUMB | ✓ | |
BCJ SPARC | ✓ | |
DELTA | ✓ | ✓ |
BCJ2 | ✓ |
Usage
[dependencies]
sevenz-rust = { version = "0.11" }
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.11", features = ["aes256"] }
sevenz_rust2::decompress_file_with_password("path/to/encrypted.7z", "path/to/output", "password".into()).expect("complete");
Compression
Add the 'compress' feature:
[dependencies]
sevenz-rust2 = { version = "0.11", 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");
Compress with AES encryption
Add the 'compress' and 'aes256' feature:
[dependencies]
sevenz-rust2 = { version = "0.11", 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");
Advanced Usage
Solid compression
Solid archives can in theory provide better compression rates, but decompressing a file needs all previous data to also be decompressed.
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");
Configure the 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.
Dependencies
~2–11MB
~157K SLoC