use std::{fs::File, io::Write, path::PathBuf};
fn main() {
let mut sz = sevenz_rust::SevenZReader::open("examples/data/sample.7z", "pass".into()).unwrap();
let total_size: u64 = sz
.archive()
.files
.iter()
.filter(|e| e.has_stream())
.map(|e| e.size())
.sum();
let mut uncompressed_size = 0;
let dest = PathBuf::from("examples/data/sample");
sz.for_each_entries(|entry, reader| {
let mut buf = [0u8; 1024];
let path = dest.join(entry.name());
std::fs::create_dir_all(path.parent().unwrap()).unwrap();
let mut file = File::create(path).unwrap();
loop {
let read_size = reader.read(&mut buf)?;
if read_size == 0 {
break Ok(true);
}
file.write_all(&buf[..read_size])?;
uncompressed_size += read_size;
println!(
"progress:{:.2}%",
(uncompressed_size as f64 / total_size as f64) * 100f64
);
}
})
.unwrap();
}