基于Windows Qt实现xxx.tar.gz文件压缩

本文介绍如何在Windows环境下利用Qt和7z工具进行tar.gz格式的文件压缩。通过分两步操作,先使用7z生成.tar文件,再将其压缩为.tar.gz,解决Qt在Windows下不支持管道命令的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在linux系统中,经常用到tar.gz格式进行压缩,许多搭建在linux服务器上的升级文件必须为tar.gz格式。为了方便文件压缩,故想到通过Qt制作安装包工具,在windows下按照自定义格式进行文件打包压缩。

        而在windows下进行压缩,需要借助7z压缩工具:https://www.7-zip.org/download.html

通过调用7z命令来进行压缩,如上图所示,除命令行工具外,当然也有源码和sdk,有兴趣可以自行研究 。下面仅介绍最简单的方法-------通过调用7z命令实现文件压缩。

一、7z工具包下载下来后,首先通过dos命令查看其用法。  

进入解压目录,输入7za.exe --help,查看命令用法。

7za.exe主要用到如下几个参数:

二、QT调用7z命令压缩

命令行通过如下命令,可次直接将文件夹test打包成test.tar.gz文件。

# 7za.exe a -ttar -so test.tar test/* | 7za.exe a -si test.tar.gz

但是通过QProcess 调用该命令如法实现功能,猜测可能是windows Qt不支持管道命令 | (若有大佬一步实现压缩,欢迎留言),所以QT进行tar.gz压缩时需要分两步来进行,首先通过tar归档文件为.tar文件,然后通过gzip将.tar文件压缩为.tar.gz文件。

三、调用7za.exe相关代码如下:

    QProcess *process = NULL;
//QString  cmd_format = "7za.exe --help";  //测试能够调用7za.exe命令
    QString  cmd_format = "7za.exe a -ttar service.tar \""; //生成归档文件
    cmd_format += ui->service_update_dir->text();  //通过QFileDialog选择的目录
    cmd_format += "/*";  //目录下的所有文件
    qDebug()<<"cmd = "<<cmd_format;
    process = new QProcess(this);

    process->start(cmd_format);  //压缩为service.tar
    process->waitForFinished(); //等待执行完成
    qDebug()<<"Result:"<<process->readAll();

    cmd_format = "7za.exe a -tgzip ";  //生成gz文件
    cmd_format += ui->service_output_dir->text();  //gz文件生成目录
    cmd_format += "/service.tar.gz";
    cmd_format += " service.tar";
    qDebug()<<"cmd = "<<cmd_format;

    process->start(cmd_format);
    process->waitForFinished(); //等待执行完成
    qDebug()<<"Result:"<<process->readAll();
    process->deleteLater();

    QFile::remove("service.tar"); //删除中间归档文件

运行时需要将7za.exe程序及dll拷贝至工程目录下,否则无法执行7za.exe命令。如图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值