Rust如何实现zip压缩与解压
在Rust中如何实现文件的zip压缩与解压?有没有推荐的库或者标准库方法?希望能提供一个简单的代码示例说明基本用法,包括如何创建zip文件、添加文件到压缩包,以及如何解压zip文件到指定目录。另外,处理大文件时需要注意哪些性能问题?
2 回复
Rust中可用zip库实现压缩与解压:
压缩:
use zip::write::FileOptions;
let file = File::create("test.zip")?;
let mut zip = zip::ZipWriter::new(file);
zip.start_file("data.txt", FileOptions::default())?;
zip.write_all(b"Hello World")?;
解压:
let file = File::open("test.zip")?;
let mut zip = zip::ZipArchive::new(file)?;
let mut file = zip.by_name("data.txt")?;
let mut content = String::new();
file.read_to_string(&mut content)?;
需在Cargo.toml添加依赖:zip = "0.6"
在 Rust 中,可以使用 zip crate 实现 ZIP 文件的压缩与解压。以下是具体实现方法:
1. 添加依赖
在 Cargo.toml 中添加:
[dependencies]
zip = "0.6"
2. 解压 ZIP 文件
use std::fs::File;
use std::io::{Read, Write};
use zip::read::ZipArchive;
fn unzip_file(zip_path: &str, extract_to: &str) -> Result<(), Box<dyn std::error::Error>> {
let file = File::open(zip_path)?;
let mut archive = ZipArchive::new(file)?;
for i in 0..archive.len() {
let mut file = archive.by_index(i)?;
let outpath = std::path::Path::new(extract_to).join(file.name());
if file.name().ends_with('/') {
std::fs::create_dir_all(&outpath)?;
} else {
if let Some(parent) = outpath.parent() {
std::fs::create_dir_all(parent)?;
}
let mut outfile = File::create(&outpath)?;
std::io::copy(&mut file, &mut outfile)?;
}
}
Ok(())
}
3. 创建 ZIP 文件
use std::fs::File;
use std::io::Write;
use zip::write::SimpleFileOptions;
use zip::ZipWriter;
fn create_zip(
files: Vec<(&str, &[u8])>,
output_path: &str
) -> Result<(), Box<dyn std::error::Error>> {
let file = File::create(output_path)?;
let mut zip = ZipWriter::new(file);
let options = SimpleFileOptions::default().compression_method(zip::CompressionMethod::Stored);
for (filename, content) in files {
zip.start_file(filename, options)?;
zip.write_all(content)?;
}
zip.finish()?;
Ok(())
}
4. 使用示例
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 解压示例
unzip_file("example.zip", "extracted")?;
// 压缩示例
let files = vec![
("file1.txt", b"Hello World!"),
("file2.txt", b"Rust ZIP example"),
];
create_zip(files, "output.zip")?;
Ok(())
}
主要特性
- 支持标准 ZIP 格式
- 可设置压缩方法(Stored、Deflated 等)
- 支持目录结构
- 内存安全,无数据竞争
记得处理可能的错误,并根据需要调整压缩选项。

