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源碼包。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL9UlaNFTS61ENFRVT3V1MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLykzMwAjN1UTM5ETMwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2、配置
解壓源碼
unzip zlib1211.zip
進入源碼目錄
配置編譯器
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/include
LIBS += -L$$PWD/quazip/lib/linux -lquazip
}
測試代碼:
#include <QCoreApplication>
#include "JlCompress.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 将程式目前目錄進行壓縮,壓縮檔案為myTest.zip
JlCompress::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
若對你有幫助,歡迎點贊、收藏、評論,你的支援就是我的最大動力!!!
同時,阿超為大家準備了豐富的學習資料,歡迎關注公衆号“超哥學程式設計”,即可領取。