首页 > 其他分享 >rust中使用zip crate解压.gz文件

rust中使用zip crate解压.gz文件

时间:2023-11-01 17:23:51浏览次数:38  
标签:mut name zip crate gz let file path

  1. 添加所需的库到Cargo.toml文件中:
zip = "0.6.6"
  1. 直接上代码, 都在酒里了.
use std::fs::File;
use std::io::{Read, Write};
use std::process::exit;
use std::path::{Path, PathBuf};
use zip::ZipArchive;

fn main() {
    // ======设置输入输出路径======
    let zip_path = Path::new("xxx.gz");
    println!("{}", zip_path.display());
    if !zip_path.exists() {
        println!("===指定文件不存在!===");
        exit(1);
    }
    let mut output_path = PathBuf::new();
    output_path.push("./output");
   	// ======设置输入输出路径======
    
    // ======读取压缩文件数据======
    let zip_data = File::open(zip_path).expect("===读取压缩文件失败!!===");
    let mut archive = ZipArchive::new(zip_data).unwrap();
    // ======读取压缩文件数据======
    
    // ======挨个处理压缩文件中的文件======
    for index in 0..archive.len() {
        let mut file_data: zip::read::ZipFile<'_> = archive.by_index(index).expect("===读取压缩文件失败!!===");

        let out_file_name = match file_data.enclosed_name() {
            Some(path) => path.to_owned(),
            None => continue,
        };  // 获取单个文件的文件名
        
        let out_file_name: PathBuf = PathBuf::from(&output_path).join(out_file_name);
        println!("解压文件==>:{}", out_file_name.display());
        
        let mut outfile = File::create(&out_file_name).expect("===创建数据文件失败!!===");
        let mut buffer: Vec<u8> = Vec::new();
        
        file_data.read_to_end(&mut buffer).unwrap(); // 将文件数据读入缓冲区
        outfile.write_all(&buffer).expect("===写入文件失败!!==="); // 将缓冲区文件存入文件.
    }
}

标签:mut,name,zip,crate,gz,let,file,path
From: https://www.cnblogs.com/SleepSupervisor/p/17803615.html

相关文章

  • mysql安装步骤(windows版zip包)
    1.官网下载安装包https://cdn.mysql.com//Downloads/MySQL-8.2/mysql-8.2.0-winx64.zip2.在下载后的目录下找到Mysql压缩包并将其解压至自己创建的一个文件夹内(注意:目录名不可以是中文)3.my.ini内容如下,注意路径改成自己的,第5行basedir=、第7行datadir=[mysqld]#设置3306端口port......
  • 前端利用oss图片地址返回url下载zip包
    //首先引入插件npminstalljszip//导入项目importJSZipfrom'jszip'//利用canvas.toDataURL转换base64方法下载图片downZip(){//测试数据letdownLoadImageList=['https://img1.baidu.com/it/u=1112636550,1561836273&fm=253&app=120&siz......
  • [CISCN2023] unzip
    [CISCN2023]unzip前言什么是软链接软链接是Linux里面常用的一个命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。它类似与c语言中的指针,传递的是文件的地址。软链接类似于windows中的快捷方式。可以用这种方式来突破只能在tmp文件夹上传文件的限制。解题unzip......
  • Kaldi安装过程中遇到cub-1.8.0.tar.gz、sctk-20159b5.tar.gz、openfst-1.7.2.tar.gz三
    Kaldi安装过程中遇到cub-1.8.0.tar.gz、sctk-20159b5.tar.gz、openfst-1.7.2.tar.gz三个包下载不全产生报错的状况。从官网下载三个包,然后上传到Linux服务器kaldi/tools目录下,再运行Makefile即可。以下是三个包的下载链接cub-1.8.0.tar.gz下载链接:https://pan.baidu.com/s/1jX......
  • 分布式链路追踪系统zipkin【杭州多测师_王sir】
    一、部署zipkin环境的方式==》1.docker  2、java-jar   3、运行源码二、分别可以在Linux系统和Windows系统里面运行zipkin三、在地址栏输入:http://127.0.0.1:9411四、zipkin的流程图由上图可以看出,应用的代码(User Code)发起 Http Get 请求(请求路径 /foo),经过 Zipkin......
  • [DASCTF X CBCTF 2023][misc][wp]SecretZip
     1.打开purezip.zip,发现加密,猜测是伪加密,失败。 2.后面看了别人的wp,才明白这个key的作用:key是密钥,跟secretkey.zip是有联系的(同一个单词),因此这个key文件有可能就是secretkey.zip的未加密版本(至少是其中一部分)。3.由此采取bkcrack进行破解: 4.成功......
  • 记录--记录用前端代替后端生成zip的过程,速度快了 57 倍!!!
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助业务场景:产品有个功能是设置主题。类似手机自动切换壁纸,以及其他功能颜色,icon,字体等。管理员需要在后端管理系统多次下载不同主题,(至于要干啥就不说了...),主题中可能有30~100个高清壁纸,icon等。现在每次下......
  • oracle 11g 由于0rc4km05kgzb9占用undo 使用率高问题
    设置参数解决altersystemset"_smu_debug_mode"=33554432;设置这个之后v$undostat.tuned_undoretention会取(maxquerylensecs+300)和参数undo_retention里的最大值altersystemset"_undo_autotune"=false;直接禁用了AutomaticTuningofUndoRetention特性altersystem......
  • [全网唯一]通过修改源码使得从ZIP提取文件并在提取时进行重命名保存(博客园同步发布)
    源码位置:/Lib/zipfile.py/ZipFile/_extract_member/zipfile.py或者直接点击extract函数.在使用python解压缩zip文件时,由于需要在解压时重命名文件为我想要的格式,而不巧的是,zipfile包官方源代码没有这个功能...于是,在百度之后,果断放弃寻找现成代码的想法.在研究了一......
  • 如何批量分别压缩大量大型文件 |7z 7zip cmd powershell RAR
    Background我们经常压缩文件,这点很普通。但有时候会产生分卷压缩的需求。所谓分卷,就是把压缩文件拆分成若干文件,已达到限制单个文件容量上限的目的。在目前的时代下,这种需求非常小众,但以下两种情况还是有可能会有作用。想把非常大的文件/文件夹上传到网盘,但是网盘有单个文件......