Failed to unpack complete file
LumaRay opened this issue · 1 comments
LumaRay commented
The code below fails to decompress full file, I cannot figure out why. Please help!
The file used: https://github.com/LumaRay/test-xml-json/blob/master/data/mondial-3.0-mini.json
use std::fs::File;
use std::io::{Read, Write};
use zip;
use zip::CompressionMethod;
const FILE_NAME: &str = "mondial-3.0-mini.json";
fn main() {
let mut f = File::open("/home/test/test-xml-json/data/".to_owned() + FILE_NAME).unwrap();
let mut buf_to_pack: Vec<u8> = vec![];
f.read_to_end(&mut buf_to_pack).unwrap();
let mut buf_packed: Vec<u8> = vec![];
let mut zip = zip::ZipWriter::new(std::io::Cursor::new(&mut buf_packed));
let options = zip::write::FileOptions::default()
.compression_method(CompressionMethod::Zstd)
.compression_level(Some(-7));
zip.start_file(FILE_NAME, options).unwrap();
zip.write(&buf_to_pack).unwrap();
zip.finish().unwrap();
drop(zip);
let mut buf_unpacked = vec![];
let mut archive = zip::ZipArchive::new(std::io::Cursor::new(&mut buf_packed)).unwrap();
let mut file = archive.by_name(FILE_NAME).unwrap();
file.read_to_end(&mut buf_unpacked).unwrap();
drop(file);
println!("{} {} {}", buf_to_pack.len(), buf_packed.len(), buf_unpacked.len()); // Gives 1174212 39458 131072
}
BTW, it's fine when I use Store compression, but any other compression makes the decompressed file cut.
LumaRay commented
Ok I think I've found the issue: I should have used zip.write_all
instead of zip.write
.