QT 解压tar.gz格式的压缩包

2023-05-16

一、tar.gz

以.tar.gz为后缀的文件是一种压缩文件,在Linux下常见。一般情况下都是源代码的安装包。它其实是先打包成tar格式的文件,然后利用gzip压缩技术来压缩。这两天我想在windows下去解压这种类型的压缩包,不是拿那种可视化的软件去操作,所以一直想着有什么开源的解压库,可以一次解压,但是没找到,最后使用windows命令行去执行,通过gzip.exe和7za.exe控制台程序去执行
在这里插入图片描述

二、原理

分两步走,先将file.tar.gz压缩包解压为file.tar,再将file.tar解压为file.

三、示例代码

//D:/pig.tar.gz -> D:/pig
bool FileOperator::extractTarGz(QString fileName, QString dstPath)
{
    if(fileName.length()<8 || fileName.right(7)!=".tar.gz")
    {
        qDebug()<<"格式错误, 必须为'.tar.gz'";
        return false;
    }
    if(dstPath.length() == 0)
    {
        qDebug()<<"解压目标路径为空";
        return false;
    }
    int ret;
    QProcess p;

    qDebug()<<fileName<<" 解压到 "<<dstPath;

    fileName.replace("/", "\\");
    //exe程序路径
    QString binPath = QApplication::applicationDirPath() + "/";
    binPath.replace("/", "\\");
    qDebug()<<binPath;
    
    //1.使用Windows命令行(路径表示方法"\\"),gzip.exe、7za.exe
    //解压gz格式
    QStringList args;
    args.append("-d");
    args.append("-f");
    args.append(fileName);
    ret = p.execute(binPath + "gzip.exe", args);
    if(ret != 0)
    {
        qDebug()<<"gzip 返回错误码:"<<ret;
        return false;
    }
    qDebug()<<"file.tar.gz -> file.tar 成功!";

    //压缩包文件名剥离".gz"
    fileName = fileName.left(fileName.length()-3);

    //解压tar格式
    QStringList args1;
    args1.append("x");
    args1.append(fileName);
    args1.append("-y");
    dstPath.replace("/", "\\");
    args1.append("-o" + dstPath);
    p.execute(binPath + "7za.exe", args1);
    if(ret != 0)
    {
        qDebug()<<"7za 返回错误码:"<<ret;
        return false;
    }
    qDebug()<<"file.tar -> file 成功!";
    QFile::remove(fileName);

    return true;
}

四、上面的代码相当于在命令行中执行。

代码和命令行执行的效果是一样的,7za功能很强大,支持多种格式,使用它解压tar和gz格式都可以。
在这里插入图片描述
在这里插入图片描述
参考了:[hanzengyi]:windows 下调用gzip.exe 和tar.exe解压*.tar.gz压缩包到指定目录

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT 解压tar.gz格式的压缩包 的相关文章

  • 计算机网络实验三 路由协议的配置

    一 实验目的 1 掌握静态路由协议的配置 2 掌握RIP协议特点和其配置方式 xff1b 3 掌握OSPF协议的特点和其配置方式 xff1b 二 实验要求 1 掌握静态路由协议的配置 1 配置一个互联网络 xff0c 可如下图所示 xff1

随机推荐

  • C语言实现有限状态机

    以下是转载内容 xff1a 传说中的分隔符 来源 1 xff1a http www cnblogs com swingboat archive 2005 07 27 201488 html 转载 1 有限状态机的实现 lt script t
  • linux内核-中断的响应和服务

    搞清了i386 CPU的中断机制和内核中有关的初始化以后 xff0c 我们就可以从中断请求的发生到CPU的响应 xff0c 再到中断服务程序的调用与返回 xff0c 沿着CPU所经历的路线走一遍 这样 xff0c 既可以弄清和理解linux
  • Ubuntu的Java编辑器eclipse打不开闪退的解决方法

    Linux Ubuntu的eclipse安装上了 xff0c 但是打不开 xff0c 闪退的解决方法 xff1a 首先确保你已经在安装了eclipse 如果你已经安装了eclipse xff0c 你就可以向下进行 xff1a 你点击ecli
  • 马走棋盘之最短路径步数——C

    描述问题 输入测试例子数T xff0c 每个例子输入棋盘大小m行n列 1 lt 61 m n lt 61 500 再输入a b c d表示 a b gt c d xff0c 1 lt 61 a c lt 61 m 且 1 lt 61 b d
  • Go语言自学系列 | golang标准库os模块 - File文件写操作

    视频来源 xff1a B站 golang入门到项目实战 2021最新Go语言教程 xff0c 没有废话 xff0c 纯干货 xff01 持续更新中 一边学习一边整理老师的课程内容及试验笔记 xff0c 并与大家分享 xff0c 侵权即删 x
  • CentOS 下中文文件名显示乱码

    在windows上使用ftp上传文件到linux上 xff0c 中文名称在Linux系统中显示为乱码 虽然将Linux的env设置了LANG 61 en US UTF 8 xff0c 并且本地的Shell客户端编码也设置成UTF 8 xff
  • 树莓派centos 7.x版本 编译安装 PHP7.2

    下载安装包 树莓派上yum里没有的软件只能编译安装 wget http cn2 php net distributions php 7 2 0 tar gz tar zxvf php 7 2 0 tar gz cd php 7 2 0 安装
  • docker 利用docker拉取Nvidia/cuda官方镜像,部署深度学习环境

    利用docker拉取Nvidia cuda官方镜像 xff0c 部署深度学习环境 1 拉取Nvidia cuda官方镜像2 生成容器3 在容器内安装深度学习环境 看完这篇博文 xff0c 可以查看我总结的另一篇博文教程 xff1a 利用do
  • 树莓派安装anaconda

    树莓派安装anaconda 1 查看版本 xff1a 2 下载安装包 xff1a 3 安装 xff1a 4 查看 5 换源 xff1a 6 创建虚拟环境 7 解决部分异常问题 8 卸载 xff1a 1 查看版本 xff1a uname sp
  • QT 项目 实现基于TCP的文件服务器/客户端,支持上传和下载

    Demo xff1a 下载地址 https download csdn net download guorong520 12408371 没有csdn积分的小伙伴可以留言你的QQ邮箱 xff0c 我会发送Demo xff0c 相互交流学习
  • QT 常用setAttribute 、setWindowFlags

    文章目录 一 主界面1 窗体属性2 窗体标志 二 注意1 最大化按钮失效置灰的问题 一 主界面 1 窗体属性 span class token comment 设置为模态框 如果再设置无边框窗口 xff0c 那么模态会失效 xff0c 不会
  • QT 获取秒级、毫秒级时间戳

    一 时间戳 是指格林威治时间1970年01月01日00时00分00秒 北京时间1970年01月01日08时00分00秒 起至现在的总秒数 它的提出主要是为用户提供一份电子证据 xff0c 以证明用户的某些数据的产生时间 二 获取时间戳 秒级
  • Jenkins 执行Python脚本以及Bat(批处理)脚本

    文章目录 一 新建任务二 创建任务三 配置四 勾选参数化构建过程1 下拉框参数2 字符参数3 布尔参数4 git分支选项 五 执行脚本命令六 python文件存放路径七 配置以及构建效果图1 输入构建参数 xff0c 选中勾选框 xff0c
  • 为什么Ubuntu终端输入su会报错鉴定失败?

    Ubuntu刚刚安装上 xff0c 要输入一堆类似sudo apt install xxxxxx的命令进行装各种必须的软件 xff0c 老是打sudo很烦 xff0c 就su一下 xff0c 然后就能省略掉sudo xff0c 直接apt
  • python-gitlab API基本操作以及(下载指定文件或文件夹)

    一 使用python对gitlab进行自动化操作 1 python gitlab模块官网文档 2 gitlab官网文档 二 常用使用功能 span class token comment 1 登录gitlab span def span c
  • python 完美压缩文件夹为zip格式

    一 压缩 1 备注 xff08 1 xff09 os walk xff0c 会返回一个三元组 path xff1a 文件夹本身的地址 xff1b dirNames xff1a 该文件夹中所有目录的名字列表 xff1b fileNames x
  • 模拟执行网页接口

    一 背景 我想使用程序自动执行提交软件操作 xff0c 这时候需要通过谷歌浏览器去查看需要使用哪些请求字段等 二 实现方式 1 先在浏览器上输入账号 密码进行登录 2 打开开发者工具 3 设置浏览目录 4 然后输入相关参数 xff0c 手动
  • Python resquests使用multipart/form-data格式上传参数或文件

    参考 xff1a 井蛙不可语于海 一 需要注意的坑 在resquests中不用加上Content Type xff0c 否则请求无法成功 xff0c 它会有一个默认值 二 代码示例 span class token keyword try
  • QT Expression:_BLOCK_TYPE_IS_VALID断言错误

    一 最近使用QT xff0c 写了一个小小的Demo xff0c 在关闭窗口时总是报错 二 原因 1 Qt初始化时有两种构造方式 xff1a span class token comment xff08 1 xff09 将窗口对象定义在栈上
  • QT 解压tar.gz格式的压缩包

    一 tar gz 以 tar gz为后缀的文件是一种压缩文件 xff0c 在Linux下常见 一般情况下都是源代码的安装包 它其实是先打包成tar格式的文件 xff0c 然后利用gzip压缩技术来压缩 这两天我想在windows下去解压这种