Qt中利用Zlib和QuaZIP庫解壓zip檔案

2021-09-03 01:52:55 字數 3762 閱讀 4975

最近寫公司的貨架產品,在總結之前專案裡用到的**。立個flag,這幾天會把之前做的解壓縮部分的**整合到部落格中。

zip檔案解壓部分,是我踩坑最嚴重的部分。當時編譯zlib庫,quazip庫花了很長時間。所以這部分我整理的還比較詳細,希望以後不會再在這部分浪費時間。

【尤其感謝參考文獻裡的那位大佬的分享!~】

專案需求

開發環境zlib配置

開啟命令列,定位到自定義目錄:d:\3rdparty\zlib\zlib-1.2.11-quazip後,執行以下命令;

mingw32-make -f win32/makefile.gcc
quazip配置

開啟命令列,定位到自定義目錄:d:\3rdparty\quazip\quazip-0.7.3;

分條執行以下命令;

qmake "config+=release" "includepath+=d:/3rdparty/zlib/zlib-1.2.11-quazip" "libs+=-ld:/3rdparty/zlib/zlib-1.2.11-quazip -lz"

mingw32-make

qmake "config+=debug" "includepath+=d:/3rdparty/zlib/zlib-1.2.11-quazip" "libs+=-ld:/3rdparty/zlib/zlib-1.2.11-quazip -lz"

mingw32-make

以上步驟沒報錯就可以繼續下一步。

壓縮部分

/**

* @brief 壓縮單個檔案

* @param filecompressed: 壓縮包的名稱 file: 要壓縮的檔案

* @return 壓縮成功返回true否則為false

*/static

bool

compressfile

(qstring filecompressed, qstring file)

;/**

* @brief 壓縮多個檔案(檔案列表)

* @param filecompressed: 壓縮包的名稱 files: 要壓縮的檔案列表

* @return 壓縮成功返回true否則為false

*/static

bool

compressfiles

(qstring filecompressed, qstringlist files)

;/**

* @brief 壓縮乙個資料夾(不會壓縮資料夾內的隱藏檔案)

* @param filecompressed: 壓縮包的名稱 dir: 要壓縮的資料夾目錄 recursive:是否要打包子檔案目錄

* @return 壓縮成功返回true否則為false

*/static

bool

compressdir

(qstring filecompressed, qstring dir =

qstring()

,bool recursive =

true);

/** * @brief 壓縮乙個資料夾(通過設定filters引數可以壓縮資料夾內隱藏檔案)

* @param filecompressed: 壓縮包的名稱 dir: 要壓縮的資料夾目錄 recursive:是否要打包子檔案目錄 filters:過濾條件

* @return 壓縮成功返回true否則為false

*/static

bool

compressdir

(qstring filecompressed, qstring dir,

bool recursive, qdir::filters filters)

;

解壓部分
/**

@ brief 解壓單個檔案

@ return 解壓的檔案的完整路徑列表,失敗時為空。

*/static qstring extractfile

(qstring filecompressed, qstring filename, qstring filedest =

qstring()

);/**

@ brief 解壓多個檔案(檔案列表)

@ return 解壓的檔案的完整路徑列表,失敗時為空。

*/static qstringlist extractfiles

(qstring filecompressed, qstringlist files, qstring dir =

qstring()

);/** @ brief 解壓整個壓縮包

@ return 解壓的檔案的完整路徑列表,失敗時為空。

*/static qstringlist extractdir

(qstring filecompressed, qstring dir =

qstring()

);/** @ brief 獲取壓縮包內檔案列表

@ return 檔案中的檔案列表,更準確地說,是列出條目,包括檔案和目錄單獨存在

*/static qstringlist getfilelist

(qstring filecompressed)

;//4個過載函式

//param iodevice pointer to device with compressed data.

static qstring extractfile

(qiodevice *iodevice, qstring filename, qstring filedest =

qstring()

);static qstringlist extractfiles

(qiodevice *iodevice, qstringlist files, qstring dir =

qstring()

);static qstringlist extractdir

(qiodevice *iodevice, qstring dir =

qstring()

);static qstringlist getfilelist

(qiodevice *iodevice)

;

將zlib、quazip庫鏈結進專案pro檔案

#路徑需要換成自己配置的路徑

includepath += d:/3rdparty/zlib/zlib-1.2.11-quazip

libs += -ld:/3rdparty/zlib/zlib-1.2.11-quazip -lz

includepath += d:/3rdparty/quazip/quazip-0.7.3/quazip

libs += -ld:/3rdparty/quazip/quazip-0.7.3/quazip/release -lquazip

main.cpp

#include

#include

#include

intmain

(int argc,

char

* argv)

return a.

exec()

;}

如果qmake,mingw32-make命令不能使用,那就需要配置環境變數。

zipping and unzipping files with qt

Qt中利用QFileDialog操作檔案(1)

在建立應用程式的時候,我們通常會開到選單欄的file選單下面會有開啟檔案的按鈕,在這裡我們通過qt去實現一次 如果要開啟乙個檔案,首先我們需要獲取檔案路徑,qt提供了內建的qfiledialog對話方塊用來獲取需要開啟的檔名稱,qfiledialog有乙個內建靜態函式用於獲取檔案 qstring f...

Qt中的利用QProcess呼叫外部程式

今天工作中要qt呼叫記事本來開啟乙個檔案。上網查了一下用qprocess用法,一般的qprocess開啟外部程式.exe檔案,下面總結一下,挺簡單的。int qprocess execute const qstring program,const qstringlist arguments prog...

Qt中利用定時器QTimer實時顯示當前日期和時間

時顯示當前日期和時間。下面說明方法 1.在工程中宣告乙個全域性 qtimer物件 qtimer timer 2.在建構函式中定義 qtimer 並建立訊號槽關係,同時設定時間啟動 你也可以再其他地方啟動 timer new qtimer this connect timer,signal timeo...