一、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. C语言已知四位数3025具有一个特殊性质:它的前两位数字30与后两位数字25之和是55,而55的平方正好等于3025。编程找出所有具有这种性质的四位数。

    #include<stdio.h> void main() { int n, i, j; for (n = 1000; n < 10000; n++) { i = n / 100; ...

  2. 【Javaweb】给tomcat添加第三方jar包

    就是复制到lib文件夹里面 之后点击jar包右键 选择module library,点击ok就可以了

  3. 吉特日化MES系统--通过浏览器调用标签打印

    三年来做制造行业,差不多做了近30个工厂,也由纯软件转入到了大量的硬件对接,包含厂房设计(这个目前还只是小菜鸟),硬件设计(只是提提意见),安装实施调试(软件和硬件撕逼操作),当然面向的对象也由计算机 ...

  4. [ABC309G] Ban Permutation

    Problem Statement Find the number, modulo $998244353$, of permutations $P=(P_1,P_2,\dots,P_N)$ of $( ...

  5. Socket编程和实现聊天室

    一.HTTP协议的socket通信 1.server.py # 服务端 import sys import socket ip_point = ('127.0.0.1',9999) sk = sock ...

  6. 如何基于 k8s做私有化部署

    公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. 随着国内数字化转型的加速和国产化进程推动,软件系统的私有化部署已经成为非常热门的话题,因为私有化部署赋予了企业更大的灵活和 ...

  7. 【UniApp】-uni-app-网络请求

    前言 经过上个章节的介绍,大家可以了解到 uni-app-pinia存储数据的基本使用方法 那本章节来给大家介绍一下 uni-app-网络请求 的基本使用方法 步入正题 首先我们打开官方文档,我先带着 ...

  8. 创建定义store并使用组合式api、选项式api

    在项目根目录创建store文件夹(此步骤和vuex相同) 在步骤一的store文件夹下根据不同的用途场景创建单独的store文件(等同于vuex中分模块). 定义store基本步骤 步骤 导入defi ...

  9. AutoGPT实战

    1.概述 人工智能(AI)的能力持续在全球范围内引起轰动,并对我们日常生活和职业生涯带来重大变革.随着像ChatGPT这样的先进生成型AI模型以及从GPT-3到GPT-4的加速,我们在高级推理.理解更 ...

  10. Python——CSS(层叠样式表,Cascading Style Sheets)、选择器(Selectors)

    CSS(层叠样式表,Cascading Style Sheets)是一种用于描述文档样式和布局的样式表语言.它可以与HTML结合使用,用于控制网页的外观和格式.以下是CSS的主要特点和一些基本概念: ...