4 releases

0.2.1 Nov 24, 2022
0.2.0 Jul 25, 2021
0.1.1 Feb 25, 2021
0.1.0 Feb 22, 2021

#270 in Compression

Download history 1277/week @ 2024-07-21 1384/week @ 2024-07-28 2139/week @ 2024-08-04 2838/week @ 2024-08-11 1716/week @ 2024-08-18 1812/week @ 2024-08-25 1951/week @ 2024-09-01 2061/week @ 2024-09-08 1728/week @ 2024-09-15 1837/week @ 2024-09-22 2672/week @ 2024-09-29 3407/week @ 2024-10-06 3581/week @ 2024-10-13 3435/week @ 2024-10-20 3249/week @ 2024-10-27 3473/week @ 2024-11-03

14,147 downloads per month
Used in 21 crates (3 directly)

MIT license

41KB
594 lines

Rust crates for ZIP structures (zip_structs)

CI (master) CI (Release) zip_structs at crates.io zip_structs at docs.rs

This crates handles structures in ZIP files.

  • End of central directory (EOCD) structure
  • Central directory structure
  • Local file header structure
    • Data descriptor structure

Installation

Add the following line to [dependencies] in your Cargo.toml.

zip_structs = "^0.2"

Breaking changes to the API are planned for the future. Therefore, it is strongly recommended to use this versioning format.

Basic usage of parsing from the EOCD sturcture of a ZIP archive

use std::io::BufReader;
use std::fs::File;
use oem_cp::decode_string_complete_table;
use oem_cp::code_table::DECODING_TABLE_CP437;

use zip_structs::zip_central_directory::ZipCDEntry;
use zip_structs::zip_eocd::ZipEOCD;
use zip_structs::zip_local_file_header::ZipLocalFileHeader;

let mut zip_file = BufReader(File::open("path/to/archive.zip")?);

let eocd = ZipEOCD::from_reader(&mut zip_file)?;
let cd_list = ZipCDEntry::all_from_eocd(&mut zip_file, &eocd)?;

// Show file names in the ZIP archive
for cd in &cd_list {
    println!(
        "{}",
        if cd.is_encoded_in_utf8() {
            String::from_utf8_lossy(&cd.file_name_raw);
        } else {
            decode_string_complete_table(&cd.file_name_raw, DECODING_TABLE_CP437)
        }
    );
    let local_file_header = ZipLocalFileHeader::from_central_directory(&mut zip_file, &cd)?;
    do_something(&local_file_header);
}

Competing libraries

There are some libraries providing more abstract and higher-level APIs.

  • zip
  • rc-zip

These libraries do not handle general purpose bit flags in central directories and local file headers. rc-zip cannot handle file names encoded in other than UTF-8.

  • vfs-zip

This library provides virtual file system, not structures in ZIP archives.

Support of ZIP64

This library has not supported ZIP64 yet.

License

MIT

See LICENSE

Dependencies

~0.4–0.9MB
~20K SLoC