博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt实现zip压缩和解压,编译、调用zlib和QuaZip动态库过程详解
阅读量:2193 次
发布时间:2019-05-02

本文共 2468 字,大约阅读时间需要 8 分钟。

http://blog.csdn.net/qq_37354286/article/details/78858788

之前有个小项目中需要对zip压缩文件进行压缩和解压操作,需要用到zlib库,使用Qt开发的话可以用到已经封装好的QuaZip。作为一枚新人程序员应有的习惯,我将整个过程整理成了这篇文章,有不妥的地方还希望看到的朋友能够指出,谢谢!


开发环境

操作系统:Windows 7 x64

Qt版本:Qt 4.8.4
编译器:MSVC2010
zlib版本:zlib-1.2.11
QuaZip版本:QuaZip-0.7.3

这里介绍的过程中,x64和x86根据实际环境而定。


源码下载

zlib源码下载地址:

QuaZip源码下载地址:


编译zlib

打开VS2010命令提示。

这里写图片描述

进入到zlib源码目录contrib/masmx86目录下,执行bld_ml32.bat。

这里写图片描述

在zlib源码中进入contrib/vstudio/vc10目录下,用VS2010打开zlibvc.sln文件。

这里写图片描述

将配置修改为Release,Win32。

这里写图片描述

右键zlibvc进行生成。

这里写图片描述

这里写图片描述

这个时候我们可以看到vc10目录下有个x86目录,里面有个ZlibDllRelease。

这里写图片描述


编译QuaZip

打开QuaZip源码目录下,进入到quazip目录中。

这里写图片描述

在quazip目录下创建一个lib文件夹,并将刚才编译zlib时生成的ZlibDllRelease拷贝到该目录下。

在quazip目录下创建一个include文件夹,将zlib源码中的zconf.h和zlib.h拷贝到该目录下。

然后回到QuaZip源码目录下,用QtCreator打开quazip.pro。

这里写图片描述

编辑quazip.pro,删掉qztest和qztest.depends = quazip一行。

这里写图片描述

在quazip下的quazip.pro中的win32中添加INCLUDEPATH包含头文件和LIBS链接zlib库,也就是刚才新建的lib目录和include目录。

win32 {    headers.path=$$PREFIX/include/quazip    headers.files=$$HEADERS    target.path=$$PREFIX/lib    INSTALLS += headers target    # workaround for qdatetime.h macro bug    DEFINES += NOMINMAX    INCLUDEPATH += $$PWD/include    LIBS += -L$$PWD/lib/ZlibDllRelease -lzlibwapi}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

使用Qt编译quazip,编译一个Debug版本,编译一个Release版本。

在构建目录中,找到生成的quazip动态库,Debug版本为quazipd.dll,Release版本为quazip.dll。

新建一个QuaZip目录,在该目录下新建一个lib/debug和lib/release文件夹,将quazipd.dll、quazipd.lib和quazip.dll、quazip.lib分别拷贝到debug和release目录下。

这里写图片描述这里写图片描述

在新建的QuaZip目录下,新建一个include目录,将quazip.pro中的所有头文件以及zlib.h和zconf.h拷贝到include目录下。

这里写图片描述

QuaZip就算是编译好了。

调用QuaZip

QuaZip中封装了两个接口,一个解压,一个压缩。

// 压缩JlCompress::compressFile(QString fileCompressed, QString file);JlCompress::compressFiles(QString fileCompressed, QStringList files);JlCompress::compressDir(QString fileCompressed, QString dir);// 解压JlCompress::extractFile(QString fileCompressed, QString fileName);JlCompress::extractFiles(QString fileCompressed, QStringList files);JlCompress::extractDir(QString fileCompressed, QString dir);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

新建一个工程QuaZipTest,将刚才编译好的QuaZip目录拷贝到QuaZipTest源目录下。

这里写图片描述

添加INCLUDEPATH头文件和LIBS链接库(Debug版本用quazipd.dll,Release版本用quazip.dll)。

#debugINCLUDEPATH += $$PWD/QuaZip/includeLIBS += -L$$PWD/QuaZip/lib/debug -lquazipd
  • 1
  • 2
  • 3
  • 4
#releaseINCLUDEPATH += $$PWD/QuaZip/includeLIBS += -L$$PWD/QuaZip/lib/release -lquazip
  • 1
  • 2
  • 3
  • 4

包含头文件。

#include 
  • 1

简单的测试代码。

#include 
#include
int main(int argc, char *argv[]){ QApplication a(argc, argv); JlCompress::compressDir("E:/a.zip", "E:/a"); JlCompress::extractDir("E:/a.zip", "E:/b"); return a.exec();}

你可能感兴趣的文章
【LEETCODE】232-Implement Queue using Stacks
查看>>
【LEETCODE】225-Implement Stack using Queues
查看>>
【LEETCODE】155-Min Stack
查看>>
【LEETCODE】20-Valid Parentheses
查看>>
【LEETCODE】290-Word Pattern
查看>>
【LEETCODE】36-Valid Sudoku
查看>>
【LEETCODE】205-Isomorphic Strings
查看>>
【LEETCODE】204-Count Primes
查看>>
【LEETCODE】228-Summary Ranges
查看>>
【LEETCODE】27-Remove Element
查看>>
【LEETCODE】66-Plus One
查看>>
【LEETCODE】26-Remove Duplicates from Sorted Array
查看>>
【LEETCODE】118-Pascal's Triangle
查看>>
【LEETCODE】119-Pascal's Triangle II
查看>>
【LEETCODE】88-Merge Sorted Array
查看>>
【LEETCODE】19-Remove Nth Node From End of List
查看>>
【LEETCODE】125-Valid Palindrome
查看>>
【LEETCODE】28-Implement strStr()
查看>>
【LEETCODE】6-ZigZag Conversion
查看>>
【LEETCODE】8-String to Integer (atoi)
查看>>