Qt基于QuaZIP实现文件压缩/解压(Win下)

如有需要,欢迎查看《Qt基于QuaZIP实现文件压缩/解压(Linux下)》文章。

QuaZIP是使用Qt/C++对ZLIB进行简单封装的用于压缩及解压缩ZIP的开源库。适用于多种平台,利用它可以很方便的将单个或多个文件打包为zip文件,且打包后的zip文件可以通过其它工具打开。

Qt中提供了qCompress/qUncompress来进行文件的压缩与解压,但存在两个问题:

  • 无法很好地压缩/解压缩文件夹。
  • 只能将一个文件压缩为某种格式,压缩后的文件无法通过其它解压工具打开(如:7zip,或WinRAR),只能通过qUncompress解压读取,也就是说qCompress生成的压缩文件不包含普通压缩文件的一些头信息,导致无法解压。

一、工具准备

由于QuaZIP是基于zlib实现的,故需要先编译出zlib库,以供QuaZIP编译链接。

二、编译zlib

1、下载zlib源码

进入http://www.zlib.net/,下载zlib源码包。

在这里插入图片描述

2、生成VS工程文件

解压源码,cmd进入contrib/masmx64目录下

cd /d D:\test\zlib1211\zlib-1.2.11\contrib\masmx64

执行脚本

bld_ml64.bat

可以查看contrib/vstudio/vc14目录下,已经生成了VS工程文件。

在这里插入图片描述

提示:

我们执行的是contrib/masmx64/bld_ml64.bat,生成的是64位工程文件;如果要生成32位的,就执行contrib/masmx86/bld_ml32.bat。

3、使用VS进行编译

用VS2017打开zlibvc.sln文件,将配置修改为Release,Win64,以生成64位release版库文件。

如果编译debug+win64,会失败,原因没有去深究。

右键zlibvc工程,进行生成。

在contrib/vstudio/vc14/x64/ZlibDllRelease目录下,生成了zlibwapi.dll、zlibwapi.lib。

在这里插入图片描述

三、编译QuaZIP

1、下载QuaZIP源码

进入http://sourceforge.net/projects/quazip/,下载源码包。

在这里插入图片描述

提示:

本版本为旧版0.7.3。最新版为1.1,地址变更到了:https://github.com/stachenov/quazip,且编译方法也发生了变化,以下编译方法对新版本无效。

2、将zlib库和头文件加入QuaZIP工程

解压该源码,然后

  • 拷贝zlib的头文件zconf.h、zlib.h至quazip-0.7.3/quazip/zlib/include下;
  • 拷贝zlibwapi.lib至quazip-0.7.3/quazip/zlib/lib下。

如下:

在这里插入图片描述

在quazip-0.7.3/quazip/quazip.pro文件中,win32下添加:

INCLUDEPATH += $$PWD/zlib/include
LIBS += -L$$PWD/zlib/lib -lzlibwapi

如下:

在这里插入图片描述

3、使用Qt Creator进行编译

使用Qt Creator打开quazip-0.7.3/quazip.pro文件,并编译quazip库工程。

最后生成quazip.dll、quazip.lib。

在这里插入图片描述

注意:

最好编译QuaZIP的debug版和release版,分别对应,用来链接程序的debug和release,否则,debug程序调用release的dll的话,会报错。

四、调用QuaZIP实现压缩/解压

我们建立一个Qt测试工程quazipTest,用于调用QuaZIP库。

首先,所需头文件和库,有QuaZIP和zlib两部分:

  • 拷贝quazip-0.7.3/quazip下所有头文件和zlib的zlib.h、zconf.h至quazipTest/quazip/include;
  • 拷贝quazipd.lib、quazip.lib至quazipTest/quazip/lib/win。

如下:

在这里插入图片描述

然后,在quazipTest.pro文件中,添加如下内容:

win32 {
    INCLUDEPATH += $$PWD/quazip/include
    CONFIG(debug, debug|release) {
        LIBS += -L$$PWD/quazip/lib/win -lquazipd
    } else {
        LIBS += -L$$PWD/quazip/lib/win -lquazip
    }
}

测试代码:

#include <QCoreApplication>
#include "JlCompress.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 将程序当前目录进行压缩,压缩文件为myTest.zip
    JlCompress::compressDir("D:/myTest.zip", "./");

    // 将myTest.zip解压到D:/myTest目录下
    JlCompress::extractDir("D:/myTest.zip", "D:/myTest");

    return a.exec();
}

运行时,依赖zlibwapi.dll+quazipd.dll或quazip.dll。

执行结果如下:

在这里插入图片描述

在JlCompress.h中,封装了很多方法,支持对单文件、多文件、目录等进行压缩,可以根据实际选择使用。

本文涉及工程代码:

https://gitee.com/bailiyang/cdemo/tree/master/Qt/59quazipTest/quazipTest



若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

在这里插入图片描述

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值