#zip #archive

zip_structs

ZIP archives structures handling library

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

#501 in Compression

Download history 6959/week @ 2025-10-20 7306/week @ 2025-10-27 7388/week @ 2025-11-03 6577/week @ 2025-11-10 6994/week @ 2025-11-17 7345/week @ 2025-11-24 8819/week @ 2025-12-01 8239/week @ 2025-12-08 6939/week @ 2025-12-15 6430/week @ 2025-12-22 7509/week @ 2025-12-29 8622/week @ 2026-01-05 10913/week @ 2026-01-12 11483/week @ 2026-01-19 10353/week @ 2026-01-26 13200/week @ 2026-02-02

47,077 downloads per month
Used in 24 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

~295–720KB
~16K SLoC