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"
.expect;
decompress_file
Decompress a encrypted 7z file
Add 'aes256' feature
[dependencies]
sevenz-rust={version="0.2", features=["aes256"]}
.expect;
decompress_file_with_password
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.
.expect;
compress_to_path
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.
.expect;
compress_to_path_encrypted
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
0.5.4 2023-1213
- Added docs
- Renamed
FolderDecoder
toBlockDecoder
- Added method to compress paths in non-solid mode
- Fixed entry's compressed_size is always 0 when reading archives.
0.5.3
Fixed 'Too many open files' Reduce unnecessary public items #37
0.5.2 - 2023-0824
Fixed file separator issue on windows system #35
0.5.1 - 2023-0823
Sub crate lzma-rust
code optimization
0.5.0 - 2023-0819
- Added support for BCJ2.
- Added multi-thread decompress example
0.4.3 - 2023-0616
- Support write encoded header
- Added
LZMAWriter
0.4.2 - 2023-06-10
- Removed unsafe code
- Changed
SevenZWriter.finish
method return inner writer - Added wasm compress function
- Updates bzip dependency to the patch version of 0.4.4(#23)
0.4.1 - 2023-06-07
- Fixed unable to build without default features
0.4.0 - 2023-06-03 - Solid compression
0.3.0 - 2023-06-02 - Encrypted compression
- Added Encrypted compression
0.2.11 - 2023-05-24
- Fixed numerical overflow
0.2.10 - 2023-04-18
- Change to use nt-time crate(#20)
- Fix typo(#18)
- make function generics less restrictive (#17)
- Solve warnings (#16)
- run rustfmt on code (#15)
0.2.9 - 2023-03-16
- Added bzip2 support(#14)
0.2.8 - 2023-03-06
- Fixed write bitset bugs
0.2.7 - 2023-03-05
- Fixed bug while read files info
0.2.6 - 2023-02-23
- Added zstd support and use enhanced filetime lib(#11)
- Fixed lzma encoder bugs
0.2.4 - 2023-02-16
- Changed return entry ref when pushing to writer(#10)
0.2.3 - 2023-02-07
- Fixed incorrect handling of 7z time
0.2.2 - 2023-01-31 - Create sub crate lzma-rust
- Move mod
lzma
to sub cratelzma-rust
- Modify Github Actions to run tests with --all-features
0.2.0 - 2023-01-08 - Added compression supporting
- Added compression supporting
0.1.5 - 2022-11-01 - Encrypted 7z files decompression supported
- Added aes256sha256 decode method
- Added wasm support
- Added new tests (for Delta and Copy) and Github Actions CI(#5) by bfrazho
0.1.4 - 2022-09-20 - Replace lzma/lzma2 decoder
- Chnaged new lzma/lzma2 decoder