一、前言
QuaZIP是使用Qt/C++對ZLIB進行簡單封裝的用於壓縮及解壓縮ZIP的開源庫。適用於多種平臺,利用它可以很方便的將單個或多個文件打包爲zip文件,且打包後的zip文件可以通過其它工具打開。
QuaZIP下載:
https://github.com/stachenov/quazip
ZLIB編譯方法:
https://blog.csdn.net/yxy244/article/details/105024989
編譯小知識:
QT編譯要注意編譯器MinGW和MSVC鏈接上有點不同:
在MSVC下編程,當要使用DLL動態庫文件時,必須要有導入庫.lib文件才能編譯鏈接通過。
在MinGW下編程,既可以與導入庫.lib鏈接,也可以直接與.dll動態庫鏈接。在大多數情況下,.MinGW的導入庫.dll.a文件不起作用,這稱爲Direct linking to a dll技術。
二、編譯QuaZIP
1.quazip目錄下新建一個lib文件夾,把編譯好的zlib動態庫和導入庫複製過來,這裏有幾點注意:
(1)如果開發的是32位應用程序,那就複製32位zlib1.dll和lib;開發64位程序就複製64位的dll,編譯32位和64位的zlib方法上面的鏈接有。
(2)如果用MinGW編譯器,那麼前面的編譯知識就知道了,鏈接dll或lib都可以;但是用MSVC編譯器,只能用zdll.lib導入庫,而不能直接用dll。這裏兩個都複製過來,其實只複製lib也可以。
2.quazip目錄下新建一個include文件夾,複製zlib的頭文件過來
3.打開quazip工程,在.pro文件文件裏找到win32,在最後添加頭文件和庫文件路徑:
LIBS += -L$$PWD/lib/ -lzdll
INCLUDEPATH += $$PWD/include
注意網上有的教程是鏈接到zlib1.dll,如果這麼寫,一定要用MinGW編譯才能通過的哦。
LIBS += -L$$PWD/lib -lzlib1
INCLUDEPATH += $$PWD/include
4. Debug和Release都編譯一下,就會得到quazip的動態庫和它的導入庫了
二、測試例程
1.新建一個QT工程,在工程目錄下新建文件夾lib,複製quazip的導入庫進來
2.工程目錄下新建一個include文件夾,將quazip和zlib的頭文件都複製過來
3. pro文件裏添加頭文件和庫文件路徑:
CONFIG(release, debug|release): LIBS += -L$$PWD/lib -lquazip
CONFIG(debug, debug|release): LIBS += -L$$PWD/lib -lquazipd
INCLUDEPATH += $$PWD/include
4.測試代碼
#include "JlCompress.h"
static bool compressDir(QString fileCompressed, QString dir=QString(), bool recursive = true)
第一個參數fileCompressed表示壓縮後的文件
第二個參數dir表示待壓縮的目錄
第三個參數recursive表示是否遞歸
解壓縮用靜態方法:extractDir
static QStringList extractDir(QString fileCompressed, QString dir=QString())
第一個參數fileCompressed表示待解壓縮的文件
第二個參數表示解壓縮存放的目錄
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "JlCompress.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
JlCompress::compressDir("d:\\test.zip", "d:\\test1"); //壓縮
JlCompress::extractDir("d:\\test.zip", "d:\\test2");//解壓
}
MainWindow::~MainWindow()
{
delete ui;
}
5.編譯生成exe,別忘了把quazip、zlib1動態庫複製過來和exe放一起,才能運行哦。
三、注意事項
1.根據你要開發的應用程序,編譯zlib、quazip的32位dll或者64位dll,別搞混了。
2.要注意編譯器MinGW和MSVC上鍊接的區別。