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

一、tar.gz

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

二、原理

分两步走,先将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格式都可以。
QT 解压tar.gz格式的压缩包
QT 解压tar.gz格式的压缩包
参考了:[hanzengyi]:windows 下调用gzip.exe 和tar.exe解压*.tar.gz压缩包到指定目录

QT 解压tar.gz格式的压缩包QT 解压tar.gz格式的压缩包 daboluo520 发布了92 篇原创文章 · 获赞 23 · 访问量 2万+ 私信 关注
上一篇:Mybatis - 值传递的4种方式


下一篇:mysql update语句的用法