r_tool/core/
zip_util.rs

1use std::fs::File;
2use std::io::Write;
3use std::os::unix::fs::PermissionsExt;
4
5use zip::ZipWriter;
6
7pub struct ZipUtil;
8
9impl ZipUtil {
10    pub fn compress_files(files: Vec<&str>, zip_file: &str) -> Result<(), Box<dyn std::error::Error>> {
11        let file = File::create(zip_file)?;
12
13        let mut zip = ZipWriter::new(file);
14
15        for &file_path in files.iter() {
16            let file_content = std::fs::read(file_path)?;
17            let options = zip::write::FileOptions::default()
18                .compression_method(zip::CompressionMethod::Stored)
19                .unix_permissions(std::fs::metadata(file_path)?.permissions().mode());
20
21            zip.start_file(file_path, options)?;
22            zip.write_all(&file_content)?;
23        }
24
25        zip.finish()?;
26        Ok(())
27    }
28}
29
30
31