11 unstable releases

0.6.1 Jul 29, 2021
0.6.0 Nov 30, 2020
0.5.0 Jul 24, 2020
0.4.0 Mar 25, 2020
0.1.4 Mar 19, 2020

#22 in Compression

Download history 2095/week @ 2022-01-25 2304/week @ 2022-02-01 2288/week @ 2022-02-08 2358/week @ 2022-02-15 2105/week @ 2022-02-22 1852/week @ 2022-03-01 1942/week @ 2022-03-08 2307/week @ 2022-03-15 1727/week @ 2022-03-22 3187/week @ 2022-03-29 3000/week @ 2022-04-05 3119/week @ 2022-04-12 3497/week @ 2022-04-19 4395/week @ 2022-04-26 3827/week @ 2022-05-03 2443/week @ 2022-05-10

14,443 downloads per month
Used in 22 crates (12 directly)

MIT license

15KB
273 lines

zip-extensions-rs

Rust Build status Crates.io

An extension crate for https://github.com/mvdnes/zip-rs that provides high-level functions for common ZIP tasks, such as extracting archives to a directory.

Usage examples

Configure dependencies

Add the following dependencies to the Cargo.toml file.

[dependencies]
zip = "0.5"
zip-extensions = "0.6"

See https://github.com/mvdnes/zip-rs fur further information about zip dependencies.

Extracting an archive to a directory

The ZipArchiveExtensions trait provides the extract method that can be used to unzip an archive to a directory.

use std::fs::File;
use zip_extensions::read::ZipArchiveExtensions;
...

let file = File::create(archive_file)?;
let mut archive = zip::ZipArchive::new(file)?;
archive.extract(&target_path)?;

Alternatively, the zip_extract helper can be used.

use zip_extensions::*;
...
let archive_file: PathBuf = ...
let target_dir: PathBuf = ...
zip_extract(&archive_file, &target_dir)?;

Extracting an archive entry into memory

The zip_extract_file_to_memory method can be used to extract entries ad-hoc into memory.

use zip_extensions::*;

let archive_file = PathBuf::from_str(r#"Baloo_Da_2.zip"#)?;
let entry_path = PathBuf::from_str("BalooDa2-Medium.ttf")?;

let mut buffer : Vec<u8> = vec![];
match zip_extract_file_to_memory(&archive_file, &entry_path, &mut buffer) {
    Ok(()) => { println!("Extracted {} bytes from archive.", buffer.len()) },
    Err(e) => { println!("The entry does not exist.") }
};

Creating an archive from a directory

The ZipWriterExtensions trait provides the create_from_directory and create_from_directory_with_options methods that can be used to add an entire directory hierarchy to an archive.

use zip::ZipWriter;
use zip_extensions::write::ZipWriterExtensions;
...

let file = File::create(archive_file)?;
let mut zip = ZipWriter::new(file);
zip.create_from_directory(&source_path)?;

Alternatively, the zip_create_from_directory helper can be used.

use zip_extensions::*;
...
let archive_file: PathBuf = ...
let source_dir: PathBuf = ...
zip_create_from_directory(&archive_file, &source_dir)?;

Dependencies

~1.6–2.3MB
~40K SLoC