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

  • 一、工具准备
  • 二、编译zlib
    • 1、下载zlib源码
    • 2、配置
    • 3、编译与安装
  • 三、编译QuaZIP
    • 1、下载QuaZIP源码
    • 2、将zlib库和头文件加入QuaZIP工程
    • 3、使用Qt Creator进行编译
  • 四、调用QuaZIP实现压缩/解压

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

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

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

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

一、工具准备

  • gcc
  • Qt Creator Linux版

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

二、编译zlib

1、下载zlib源码

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

2、配置

解压源码

unzip zlib1211.zip

进入源码目录

cd zlib-1.2.11

配置编译器

export CC=gcc

配置安装路径

./configure --prefix=../x86

安装目录设定为上一级的x86目录下。

3、编译与安装

编译

make

安装

make install

安装到x86目录后,该目录下有相应头文件和库文件,如下所示:

三、编译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下;
  • 拷贝libz.so、libz.so.1、libz.so.1.2.11至quazip-0.7.3/quazip/zlib/lib下。

如下:

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

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

如下:

3、使用Qt Creator进行编译

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

最后生成libquazip.so.1.0.0动态库,以及libquazip.so、libquazip.so.1、libquazip.so.1.0三个软链接。

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

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

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

  • 拷贝quazip-0.7.3/quazip下所有头文件,和zlib的zlib.h、zconf.h,至quazipTest/quazip/include;
  • 拷贝zlib的库libz.so、libz.so.1、libz.so.1.2.11,quazip的库libquazip.so、libquazip.so.1、libquazip.so.1.0、libquazip.so.1.0.0至quazipTest/quazip/lib/linux。

如下:

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

unix {INCLUDEPATH += $$PWD/quazip/includeLIBS += -L$$PWD/quazip/lib/linux -lquazip
}

测试代码:

#include <QCoreApplication>
#include "JlCompress.h"int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 将程序当前目录进行压缩,压缩文件为myTest.zipJlCompress::compressDir("D:/myTest.zip", "./");// 将myTest.zip解压到D:/myTest目录下JlCompress::extractDir("D:/myTest.zip", "D:/myTest");return a.exec();
}

运行时,依赖zlib的库libz.so、libz.so.1、libz.so.1.2.11,quazip的库libquazip.so、libquazip.so.1、libquazip.so.1.0、libquazip.so.1.0.0。

执行结果如下:

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

本文涉及工程代码:

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


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

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

Qt基于QuaZIP实现文件压缩/解压(Linux下)相关推荐

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

    Qt基于QuaZIP实现文件压缩/解压(Win下) 一.工具准备 二.编译zlib 1.下载zlib源码 2.生成VS工程文件 3.使用VS进行编译 三.编译QuaZIP 1.下载QuaZIP源码 2 ...

  2. Qt编译zlib完成文件压缩解压(Ubuntu18.04)

    一.前言 在软件开发中进行有需求需要将生成的一些文件打包上传到服务器,或者从服务器下载压缩包下来内部解压.或者自己做一些打包工具,那么使用zlib开源就可以很方便的完成.接下来介绍在zlib在Linu ...

  3. linux jar和zip,Linux命令———zip和jar文件压缩解压

    Linux命令---zip和jar文件压缩解压 (1)ubuntu 使用unzip和zip压缩文件 1.功能作用:解压缩zip文件 2.位置:/usr/bin/unzip 3.格式用法:unzip [ ...

  4. python压缩文件tar_python 实现tar文件压缩解压的实例详解

    python 实现tar文件压缩解压的实例详解 python 实现tar文件压缩解压的实例详解 压缩文件: import tarfile import os def tar(fname): t = t ...

  5. linux中.sql.gz文件解压,linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结

    本文介绍了linux下的压缩程式tar.gzip.gunzip.bzip2.bunzip2.compress .uncompress. zip. unzip.rar.unrar等程式,以及如何使用它们 ...

  6. linux压缩文件恢复,Linux文件压缩解压命令

    Linux文件压缩解压命令QV7南京数据恢复-西数科技: 硬盘/手机/SSD数据恢复专家. 025-83608636 18913825606 tar功能:文件压缩解压QV7南京数据恢复-西数科技: 硬 ...

  7. 【文件压缩解压工具类-含密码】

    文件压缩解压工具类-含密码 一.zip4j简介 二.zip4j工具类使用步骤 1.添加maven依赖 2.工具类代码 3.调用测试 三.结语 一.zip4j简介 zip4j功能比较强大,支持加密.解密 ...

  8. Linux常用文件压缩/解压命令格式大全(tar、gzip、bzip2、zip、compress、cpio、compress、dd)建议收藏

    Linux常用文件压缩/解压命令格式大全 1. tar 2. gzip 3. bzip2 4. zip 5. compress 6. cpio 7.dd 1. tar 打包备份后的文件包缀:.tar ...

  9. linux 如何打包分区文件,Linux基础------文件打包解包---tar命令,文件压缩解压---命令gzip,vim编辑器创建和编辑正文件,磁盘分区/格式化,软/硬链接...

    作业一: 1)将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) cat /etc/passwd /etc/group > /1.txt 2)将用户信息数据库文件和用户 ...

最新文章

  1. IDEA配置GitHub和Gitee
  2. Bitwise Exclusive-OR Sequence 异或,dfs,菊花图(2021.11.沈阳)
  3. [C#]获得线程池中活动的线程数
  4. 天池 在线编程 高效作业处理服务(01背包DP)
  5. Leetcode--91. 解码方法
  6. MySQL笔记-死锁原理与分析及InnoDB中如何减少死锁
  7. 浙大 PAT b1029
  8. LNK2026 module unsafe for SAFESEH image
  9. 【ROS】ros入门21讲(下)
  10. 物联网技术概论:第2章
  11. ERROR: Could not install Gradle distribution from ‘https://services.gradle.org/distributions/gradle-
  12. 静态淘宝热卖界面(纯CSS)
  13. VM 中设置 Mac 虚拟机 系统联网与时间
  14. 红外遥控风扇改手机APP远程控制杂记
  15. 房屋翻新步骤有哪些?极家装修怎么样?
  16. MySQL基础教程---创建、查询、备份数据库
  17. 数据结构 - 迭代、递归和分治思想
  18. 我总结了70篇论文的方法,帮你透彻理解神经网络的剪枝算法
  19. Win7下基于Anaconda安装TensorFlow
  20. 香港服务器的3c直连网络是什么概念,跟CN2的线路有什么不一样

热门文章

  1. 计算机类学生考试系统,学生在线考试系统.doc
  2. 北漂程序员一天的生活
  3. 用于清理系统垃圾的batch文件
  4. Redis基础(二)—— 基本命令与数据类型
  5. 在多线程应用程序中使用循环缓冲区高效地进行日志记录
  6. java日期类型_Java 学习笔记 (三) Java 日期类型
  7. 2020洪灾地图_2020的汛情有多严重?居然已经到了这种地步!
  8. linux 批量 添加后缀名,Linux下批量修改后缀名(示例代码)
  9. RecyclerView最后一条显示不全
  10. python数据预处理_Python数据分析——数据预处理的方法