天天看點

Qt基于QuaZIP實作檔案壓縮/解壓(Linux下)一、工具準備二、編譯zlib三、編譯QuaZIP四、調用QuaZIP實作壓縮/解壓

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源碼包。

Qt基于QuaZIP實作檔案壓縮/解壓(Linux下)一、工具準備二、編譯zlib三、編譯QuaZIP四、調用QuaZIP實作壓縮/解壓

2、配置

解壓源碼

unzip zlib1211.zip
           

進入源碼目錄

配置編譯器

export CC=gcc
           

配置安裝路徑

./configure --prefix=../x86
           

安裝目錄設定為上一級的x86目錄下。

3、編譯與安裝

編譯

make
           

安裝

make install
           

安裝到x86目錄後,該目錄下有相應頭檔案和庫檔案,如下所示:

Qt基于QuaZIP實作檔案壓縮/解壓(Linux下)一、工具準備二、編譯zlib三、編譯QuaZIP四、調用QuaZIP實作壓縮/解壓

三、編譯QuaZIP

1、下載下傳QuaZIP源碼

進入http://sourceforge.net/projects/quazip/,下載下傳源碼包。

Qt基于QuaZIP實作檔案壓縮/解壓(Linux下)一、工具準備二、編譯zlib三、編譯QuaZIP四、調用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下。

如下:

Qt基于QuaZIP實作檔案壓縮/解壓(Linux下)一、工具準備二、編譯zlib三、編譯QuaZIP四、調用QuaZIP實作壓縮/解壓

在quazip-0.7.3/quazip/quazip.pro檔案中,unix下添加:

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

如下:

Qt基于QuaZIP實作檔案壓縮/解壓(Linux下)一、工具準備二、編譯zlib三、編譯QuaZIP四、調用QuaZIP實作壓縮/解壓

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三個軟連結。

Qt基于QuaZIP實作檔案壓縮/解壓(Linux下)一、工具準備二、編譯zlib三、編譯QuaZIP四、調用QuaZIP實作壓縮/解壓

四、調用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。

如下:

Qt基于QuaZIP實作檔案壓縮/解壓(Linux下)一、工具準備二、編譯zlib三、編譯QuaZIP四、調用QuaZIP實作壓縮/解壓

然後,在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。

執行結果如下:

Qt基于QuaZIP實作檔案壓縮/解壓(Linux下)一、工具準備二、編譯zlib三、編譯QuaZIP四、調用QuaZIP實作壓縮/解壓

在JlCompress.h中,封裝了很多方法,支援對單檔案、多檔案、目錄等進行壓縮,可以根據實際選擇使用。

本文涉及工程代碼:

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

若對你有幫助,歡迎點贊、收藏、評論,你的支援就是我的最大動力!!!

同時,阿超為大家準備了豐富的學習資料,歡迎關注公衆号“超哥學程式設計”,即可領取。

Qt基于QuaZIP實作檔案壓縮/解壓(Linux下)一、工具準備二、編譯zlib三、編譯QuaZIP四、調用QuaZIP實作壓縮/解壓