Struct zip::read::ZipArchive
source · pub struct ZipArchive<R> { /* private fields */ }
Expand description
ZIP archive reader
At the moment, this type is cheap to clone if this is the case for the reader it uses. However, this is not guaranteed by this crate and it may change in the future.
use std::io::prelude::*;
fn list_zip_contents(reader: impl Read + Seek) -> zip::result::ZipResult<()> {
let mut zip = zip::ZipArchive::new(reader)?;
for i in 0..zip.len() {
let mut file = zip.by_index(i)?;
println!("Filename: {}", file.name());
std::io::copy(&mut file, &mut std::io::stdout())?;
}
Ok(())
}
Implementations§
source§impl<R: Read + Seek> ZipArchive<R>
impl<R: Read + Seek> ZipArchive<R>
sourcepub fn new(reader: R) -> ZipResult<ZipArchive<R>>
pub fn new(reader: R) -> ZipResult<ZipArchive<R>>
Read a ZIP archive, collecting the files it contains
This uses the central directory record of the ZIP file, and ignores local file headers
sourcepub fn extract<P: AsRef<Path>>(&mut self, directory: P) -> ZipResult<()>
pub fn extract<P: AsRef<Path>>(&mut self, directory: P) -> ZipResult<()>
Extract a Zip archive into a directory, overwriting files if they
already exist. Paths are sanitized with ZipFile::enclosed_name
.
Extraction is not atomic; If an error is encountered, some of the files may be left on disk.
sourcepub fn offset(&self) -> u64
pub fn offset(&self) -> u64
Get the offset from the beginning of the underlying reader that this zip begins at, in bytes.
Normally this value is zero, but if the zip has arbitrary data prepended to it, then this value will be the size of that prepended data.
sourcepub fn file_names(&self) -> impl Iterator<Item = &str>
pub fn file_names(&self) -> impl Iterator<Item = &str>
Returns an iterator over all the file and directory names in this archive.
sourcepub fn by_name_decrypt(
&mut self,
name: &str,
password: &[u8]
) -> ZipResult<ZipFile<'_>>
pub fn by_name_decrypt( &mut self, name: &str, password: &[u8] ) -> ZipResult<ZipFile<'_>>
Search for a file entry by name, decrypt with given password
§Warning
The implementation of the cryptographic algorithms has not gone through a correctness review, and you should assume it is insecure: passwords used with this API may be compromised.
This function sometimes accepts wrong password. This is because the ZIP spec only allows us to check for a 1/256 chance that the password is correct. There are many passwords out there that will also pass the validity checks we are able to perform. This is a weakness of the ZipCrypto algorithm, due to its fairly primitive approach to cryptography.
sourcepub fn by_name(&mut self, name: &str) -> ZipResult<ZipFile<'_>>
pub fn by_name(&mut self, name: &str) -> ZipResult<ZipFile<'_>>
Search for a file entry by name
sourcepub fn index_for_name(&self, name: &str) -> Option<usize>
pub fn index_for_name(&self, name: &str) -> Option<usize>
Get the index of a file entry by name, if it’s present.
sourcepub fn index_for_path<T: AsRef<Path>>(&self, path: T) -> Option<usize>
pub fn index_for_path<T: AsRef<Path>>(&self, path: T) -> Option<usize>
Get the index of a file entry by path, if it’s present.
sourcepub fn name_for_index(&self, index: usize) -> Option<&str>
pub fn name_for_index(&self, index: usize) -> Option<&str>
Get the name of a file entry, if it’s present.
sourcepub fn by_index_decrypt(
&mut self,
file_number: usize,
password: &[u8]
) -> ZipResult<ZipFile<'_>>
pub fn by_index_decrypt( &mut self, file_number: usize, password: &[u8] ) -> ZipResult<ZipFile<'_>>
Get a contained file by index, decrypt with given password
§Warning
The implementation of the cryptographic algorithms has not gone through a correctness review, and you should assume it is insecure: passwords used with this API may be compromised.
This function sometimes accepts wrong password. This is because the ZIP spec only allows us to check for a 1/256 chance that the password is correct. There are many passwords out there that will also pass the validity checks we are able to perform. This is a weakness of the ZipCrypto algorithm, due to its fairly primitive approach to cryptography.
sourcepub fn by_index(&mut self, file_number: usize) -> ZipResult<ZipFile<'_>>
pub fn by_index(&mut self, file_number: usize) -> ZipResult<ZipFile<'_>>
Get a contained file by index
sourcepub fn by_index_raw(&mut self, file_number: usize) -> ZipResult<ZipFile<'_>>
pub fn by_index_raw(&mut self, file_number: usize) -> ZipResult<ZipFile<'_>>
Get a contained file by index without decompressing it
sourcepub fn into_inner(self) -> R
pub fn into_inner(self) -> R
Unwrap and return the inner reader object
The position of the reader is undefined.
Trait Implementations§
source§impl<R: Clone> Clone for ZipArchive<R>
impl<R: Clone> Clone for ZipArchive<R>
source§fn clone(&self) -> ZipArchive<R>
fn clone(&self) -> ZipArchive<R>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more