Qt5.12.9编译QuaZip并使用 及 直接调用7z

本文介绍了在Qt环境下,如何利用QuaZip库进行文件压缩和解压操作,包括QuaZip的下载、编译及库的集成步骤。同时,由于QuaZip不支持进度条显示,作者转向使用Q7Zip,但在编译过程中遇到了外部符号错误,通过添加特定库文件解决了问题。文章还提到了bit7zip作为另一种选择。
摘要由CSDN通过智能技术生成

参考
https://www.cnblogs.com/lvdongjie/p/7345545.html
https://github.com/Zalafina/Q7Zip

(假如考虑到跨平台的问题的话,只能使用QuaZip或者通过QProcess调用7zip)
有个项目需求对某个文件进行打包压缩,上传给服务器,然后服务器解压对文件执行一定的操作。因此需要解压缩文件。
经过查找,发现有个QuaZip的第三方的库,据说挺好用,试一下。

还是建议大家直接将源码加到自己项目,直接编译吧。不然有坑。
源码加到项目时,需要在pro文件添加

DEFINES += QUAZIP_STATIC

1.到这里下载源码。

2.解压,然后在文件夹里面新建个build文件夹
在这里插入图片描述
3.打开cmake。设置好源码路径、编译路径。
在这里插入图片描述
4.选择适合你的编译套件。这里我选vs2017 x64
在这里插入图片描述
5.然后需要设置Qt路径。

在这里插入图片描述
6.设置好Qt路径以及quaZip的路径后,继续点击config。
在这里插入图片描述
7.再点击generate,就OK了。build中生成了vs的工程文件。
在这里插入图片描述
8.打开,并选择release,x64;生成解决方案
在这里插入图片描述
9.右键INSTALL子项目,选择 仅用于项目–》仅生成INSTALL。
在这里插入图片描述
10.完成。此时你之前在cmake设置的安装目录下面就有了库了。
在这里插入图片描述

使用的话,就像使用其他第三方库那样子了:在pro文件中包含头文件路径、库文件,然后include头文件。。。
或者参照这个


#include "JlCompress.h"

int main(int argc, char **argv)
{
    QApplication app(argc,argv);

...

    // 压缩文件夹
    JlCompress::compressDir("F:\\QuaZip.zip", "F:\\QuaZip");

    // 解压缩文件夹
    JlCompress::extractDir("F:\\QuaZip.zip", "F:\\ExtractQuaZip");

    QuaZip archive("F:\\QuaZip.zip");
    if (!archive.open(QuaZip::mdUnzip)) {
        return;
    }

    QString dstDir = "F:\\ExtractQuaZip";
    QDir dir;
    if(dir.exists(dstDir) == false)
    {
        dir.mkpath(dstDir);
    }

    dir = QDir(dstDir);

    for (bool f = archive.goToFirstFile(); f; f = archive.goToNextFile())
    {
        QString filePath = archive.getCurrentFileName();
        qDebug() << filePath;

        if (filePath.endsWith("/"))
        {
            dir.mkpath(filePath);
        }
        else
        {
            QuaZipFile zFile(archive.getZipName(), filePath);
            zFile.open(QIODevice::ReadOnly);
            QByteArray ba = zFile.readAll();
            zFile.close();

            QFileInfo fileInfo(filePath);
        
            QString mPath = fileInfo.path();
            if(dir.exists(mPath) == false)
            {
                dir.mkpath(mPath);
            }

            QFile dstFile(dstDir + "/"+ filePath);
            if (!dstFile.open(QIODevice::WriteOnly))
                return;
            dstFile.write(ba);
            dstFile.close();
        }
    }

...

用的时候会报这个错,
error: C1083: 无法打开包括文件: “zlib.h”: No such file or directory
在这里插入图片描述
因此需要将其zlib头文件路径加进来

...
INCLUDEPATH += D:\Qt\QuaZip\include\QuaZip-Qt5-1.1\quazip
LIBS += D:\Qt\QuaZip\lib\quazip1-qt5.lib

INCLUDEPATH += D:\Qt\Qt5.12.9\5.12.9\msvc2017_64\include\QtZlib
...

此外还要将dll文件拷贝过去项目的release文件夹下:
在这里插入图片描述

但是上面的QuaZip库只能一次性压缩、解压文件文件夹,没有进度条,不是很好。于是找了个貌似更加方便的方法,调用7zip
https://github.com/Zalafina/Q7Zip
下载源码之后,打开,可能会出现
无法解析的外部符号的错误
在这里插入图片描述
解决办法是在pro文件中添加合适的库文件:OleAut32.Lib、User32.Lib

...
LIBS += $$quote(C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64\OleAut32.Lib)
LIBS += $$quote(C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64\User32.Lib)
...

还有个bit7zip,感觉也挺适合的。
https://github.com/rikyoz/bit7z
https://codechina.csdn.net/mirrors/rikyoz/Bit7z?utm_source=csdn_github_accelerator
https://blog.csdn.net/llmys/article/details/87893606

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值