一、QuaZIP是什么

QuaZIP is a simple C++ wrapper over Gilles Vollant’s ZIP/UNZIP package that can be used to access ZIP archives. It uses the Qt toolkit.

二、如何编译

2.1、使用CMake编译

首先要知道的一件事:quazip是对zlib的封装,需要依赖zlib库的。直接使用CMake编译的话会遇到zlib库的路径问题:

遇到问题:

CMake提示:Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR)

解决方案:

注意到 https://github.com/stachenov/quazip 下载的压缩包里面,有个文件 NEWS.txt

QuaZip changes

* 2021-11-13 1.2
* Add CMake option to disable installation (Sebastian Rettenberger)
* Qt's internal zlib can be used now (QUAZIP_USE_QT_ZLIB, OFF by
default)
* Make tests optional (QUAZIP_ENABLE_TESTS, OFF by default)
(Gleb Ignatev)
* Fix: QuaZip::close() can be safely called multiple times now
* Fix: -lz added to pkgconfig

其中 Qt’s internal zlib can be used now (QUAZIP_USE_QT_ZLIB, OFF bydefault),意思是说,支持直接使用QT内置的zlib。

  • A、修改 CMakeLists.txt 中的 option(QUAZIP_USE_QT_ZLIB “” OFF),为option(QUAZIP_USE_QT_ZLIB “” ON)
  • B、再使用CMake(带gui界面的)根据需要配置一下,配置完毕会生成 QuaZip.sln
  • C、编译QuaZip.sln,结束后就可以得到 quazip1-qt5.dll

2.2、手动新建quazip工程

  • A、下载zlib,地址:http://www.zlib.net/
  • B、编译zlib,直接cmake编译即可
  • C、新建quazip的vs工程(qt),把quazip压缩包的文件都搬到新建的工程,然后把zlib以第三方库的形式配置到quazip工程
  • D、编译quazip.sln工程,最后得到 quazip.dll

C/C++ > 常规 > 附加包含目录:./zlib-1.2.11/include/

C/C++ > 预处理 > 预处理定义:QUAZIP_BUILD

链接器 > 常规 > 附加库目录: ./zlib-1.2.11/lib/x86/

链接器 > 输入 > 附加依赖项:zlibd.lib

需要注意的是,quazip.dll 需要依赖 zlib.dll,所以在用到的地方需要把zlib.dll一并带上,而使用 quazip1-qt5.dll,则不需要。

三、Sample

#include <QtCore/QCoreApplication>
#include <QDir>
#include <QFile>
#include <QFileInfo>
#include <QDateTime>
#include <QDebug>
#include <QElapsedTimer>
#include <QJsonDocument>
#include <QJsonObject>
#include "JlCompress.h" int main(int argc, char* argv[])
{
QCoreApplication a(argc, argv); QString zipName = QString("%1%2").arg("./download/").arg("package.zip");
QString unzipDir = "./unzip_dir";
QDir dir(unzipDir);
if (!dir.exists())
{
bool okey = dir.mkdir(unzipDir);
//bool okey = dir.mkpath(unzipDir);
QString tip = QString("mkpath %1,%2").arg(unzipDir).arg(okey);
qDebug() << tip;
} QElapsedTimer timer;
timer.start();
QStringList files = {};
QFileInfo fileInfo(zipName);
if (fileInfo.exists())
{
files = JlCompress::extractDir(zipName, unzipDir);
}
qDebug() << "files count:" << files.size();
qDebug() << "the operation(JlCompress::extractDir) took" << timer.elapsed() << "ms"; QVariantMap NameAndPathMap;
// 这里解压出来后的文件是按照文件名排序的
foreach(QString fileItem, files)
{
QString fileName = QFileInfo(fileItem).fileName();
qint64 fileSize = QFileInfo(fileItem).size();
qDebug() << "Name:" << fileName << "Size:" << fileSize << "\tPath:" << fileItem;
//
NameAndPathMap.insert(fileName, fileItem);
} //save to file
QJsonObject root = QJsonObject::fromVariantMap(NameAndPathMap);
QString content = QString(QJsonDocument(root).toJson(QJsonDocument::Indented/*Compact*/));
//
QFile writer("./content.json");
if (writer.open(QIODevice::WriteOnly))
{
writer.write(content.toUtf8());
writer.close();
}
qDebug() << "over!!!";
return a.exec();
}

四、踩过的坑

编译了zlib后,在环境变量里面都添加了 ZLIB_LIBRARYZLIB_INCLUDE_DIR,但是在CMake 配置quazip时,都没有生效。

至于网上有些使用cmake命令构建,我没过试过,例如:

cmake .. -DZLIB_INCLUDE_DIR=E:\zlib\zlib-1.2.11 -DZLIB_LIBRARY=E:\zlib\zlib-1.2.11\zlibstaticd.lib

有兴趣有时间的童鞋可以尝试一下。

【3rd_Party】使用QuaZip进行压缩和解压缩文件的更多相关文章

  1. Qt中用QuaZip来压缩和解压缩文件

    1.简介 QuaZIP是使用Qt,C++对ZLIB进行简单封装的用于压缩ZIP以及解压缩ZIP的开源库.如果你的Qt项目当中用到了压缩以及解压缩ZIP的话你可以考虑选择使用它. 官方主页:http:/ ...

  2. Linux常用命令学习3---(文件的压缩和解压缩命令zip unzip tar、关机和重启命令shutdown reboot……)

    1.压缩和解压缩命令    常用压缩格式:.zip..gz..bz2..tar.gz..tar.bz2..rar .zip格式压缩和解压缩命令        zip 压缩文件名 源文件:压缩文件   ...

  3. [Java 基础] 使用java.util.zip包压缩和解压缩文件

    reference :  http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ...

  4. 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的生命周期和程序的生命周期

    [源码下载] 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的 ...

  5. IOS开发之网络编程--文件压缩和解压缩

    前言: QQ表情包就用到了解压缩,从网络下载的那么多表情文件格式并不是一个一个图片文件,而是多个图片压缩而成的表情压缩包.下面介绍的是iOS开发中会用到的压缩和解压缩的第三方框架的使用. 注意: 这个 ...

  6. 在C#中利用SharpZipLib进行文件的压缩和解压缩收藏

    我在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net(http://www.icsharpcode.net/OpenSource/SharpZipL ...

  7. iOS中使用ZipArchive压缩和解压缩文件-备

    为什么我需要解压缩文件 有许多原因能解释为什么我要在工程中使用压缩和解压缩功能,下面是几个常见的原因: 苹果App Store的50M下载限制 苹 果公司出于流量的考虑,规定在非WIFI环境下,限制用 ...

  8. IO操作之使用zip包压缩和解压缩文件

    转自:http://www.cdtarena.com/java.html​​Java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作. 我们可以使 ...

  9. Java用ZIP格式压缩和解压缩文件

    转载:java jdk实例宝典 感觉讲的非常好就转载在这保存! java.util.zip包实现了Zip格式相关的类库,使用格式zip格式压缩和解压缩文件的时候,须要导入该包. 使用zipoutput ...

  10. 使用commons-compress操作zip文件(压缩和解压缩)

    http://www.cnblogs.com/luxh/archive/2012/06/28/2568758.html Apache Commons Compress是一个压缩.解压缩文件的类库. 可 ...

随机推荐

  1. 增长实验室-ab分流的流量保护功能介绍

    介绍ab分流的流量保护功能之前,先普及一下ab分流的一些概念和术语 名词解释: 实验:用来验证某个决定请求处理方式的功能或策略的一部分流量,通常用来验证某个功能或策略对系统指标(如PV/UV,CRT, ...

  2. 海量电商数据与用友YS系统数据对接案例

    案例背景 客户是历史比较悠久的企业.企业内部用的系统多达十几套,专门成立信息化公司进行数字化转型,第一期需求系统旺店通的ERP以及旺店通的WMS并且启用京东的沧海外仓. 在选型ERP用友ERP和金蝶E ...

  3. Django学习(一) 之 环境搭建

    写在前面 最近比较迷AI绘图,那就上个图吧,我感觉还挺好看的. 可能会有人说,之前不一致分享的是flask吗,怎么突然改到django了? 这个问题问得好,开发环境遇到了一些小困难! 不过django ...

  4. 如何利用Excel/WPS表格制作智能成绩查询系统?

    要利用Excel或WPS表格制作智能成绩查询系统,可以按照以下步骤进行: 1. 设计数据库结构:确定需要存储的学生信息和成绩数据,包括姓名.学号.科目.分数等字段. 2. 创建数据表:在Excel或W ...

  5. [ABC274D] Robot Arms 2

    Problem Statement You are given a sequence $A = (A_1, A_2, \dots, A_N)$ of length $N$ consisting of ...

  6. 打造一个极度舒适的Chrome扩展项目开发环境

    大家好,我是 dom 哥.这是我关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星. Chrome 扩展能够提高浏览器的使用体验,通过自定义 UI 界面,监听浏览器事件,改变 Web 页 ...

  7. 华企盾DSC 恢复密钥需要提供信息

    1.win.ini 2.5097目录复制一份 3.c:\windows\system32\autheninfoset.cfg (64位系统:c:\windows\syswow64\autheninfo ...

  8. 普冉PY32系列(十四) 从XL2400迁移到XL2400P

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...

  9. Intellij IDE 对接SVN

    1.安装SVN(SVN安装包见附件) 注意安装时需要选择第二个选项进行安装 2.安装SVN中文包(见附件) 安装完成后随便找个文件夹右键确认SVN安装是否生效 3.Intellij IDE得Setti ...

  10. 苹果推信群发,苹果推信群发软件,iMessage群发系统

    在当今数字化的时代,智能手机的普及率已达到了前所未有的高度,其中,苹果公司的iPhone无疑是市场上最受欢迎的智能手机之一,然而,与手机的广泛应用相伴的是,众多企业对于如何有效地向这些手机用户推送信息 ...