Qt基于QuaZIP实现文件压缩/解压(Linux下)
Qt基于QuaZIP實(shí)現(xiàn)文件壓縮/解壓(Linux下)
- 一、工具準(zhǔn)備
- 二、編譯zlib
- 1、下載zlib源碼
- 2、配置
- 3、編譯與安裝
- 三、編譯QuaZIP
- 1、下載QuaZIP源碼
- 2、將zlib庫和頭文件加入QuaZIP工程
- 3、使用Qt Creator進(jìn)行編譯
- 四、調(diào)用QuaZIP實(shí)現(xiàn)壓縮/解壓
如有需要,歡迎查看《Qt基于QuaZIP實(shí)現(xiàn)文件壓縮/解壓(Win下)》文章。
QuaZIP是使用Qt/C++對ZLIB進(jìn)行簡單封裝的用于壓縮及解壓縮ZIP的開源庫。適用于多種平臺,利用它可以很方便的將單個(gè)或多個(gè)文件打包為zip文件,且打包后的zip文件可以通過其它工具打開。
Qt中提供了qCompress/qUncompress來進(jìn)行文件的壓縮與解壓,但存在兩個(gè)問題:
- 無法很好地壓縮/解壓縮文件夾。
- 只能將一個(gè)文件壓縮為某種格式,壓縮后的文件無法通過其它解壓工具打開(如:7zip,或WinRAR),只能通過qUncompress解壓讀取,也就是說qCompress生成的壓縮文件不包含普通壓縮文件的一些頭信息,導(dǎo)致無法解壓。
一、工具準(zhǔn)備
- gcc
- Qt Creator Linux版
由于QuaZIP是基于zlib實(shí)現(xiàn)的,故需要先編譯出zlib庫,以供QuaZIP編譯鏈接。
二、編譯zlib
1、下載zlib源碼
進(jìn)入http://www.zlib.net/,下載zlib源碼包。
2、配置
解壓源碼
unzip zlib1211.zip進(jìn)入源碼目錄
cd zlib-1.2.11配置編譯器
export CC=gcc配置安裝路徑
./configure --prefix=../x86安裝目錄設(shè)定為上一級的x86目錄下。
3、編譯與安裝
編譯
make安裝
make install安裝到x86目錄后,該目錄下有相應(yīng)頭文件和庫文件,如下所示:
三、編譯QuaZIP
1、下載QuaZIP源碼
進(jìn)入http://sourceforge.net/projects/quazip/,下載源碼包。
提示:
本版本為舊版0.7.3。最新版為1.1,地址變更到了:https://github.com/stachenov/quazip,且編譯方法也發(fā)生了變化,以下編譯方法對新版本無效。
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進(jìn)行編譯
使用Qt Creator打開quazip-0.7.3/quazip.pro文件,并編譯quazip庫工程。
最后生成libquazip.so.1.0.0動(dòng)態(tài)庫,以及l(fā)ibquazip.so、libquazip.so.1、libquazip.so.1.0三個(gè)軟鏈接。
四、調(diào)用QuaZIP實(shí)現(xiàn)壓縮/解壓
我們建立一個(gè)Qt測試工程quazipTest,用于調(diào)用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文件中,添加如下內(nèi)容:
unix {INCLUDEPATH += $$PWD/quazip/includeLIBS += -L$$PWD/quazip/lib/linux -lquazip }測試代碼:
#include <QCoreApplication> #include "JlCompress.h"int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 將程序當(dāng)前目錄進(jìn)行壓縮,壓縮文件為myTest.zipJlCompress::compressDir("D:/myTest.zip", "./");// 將myTest.zip解壓到D:/myTest目錄下JlCompress::extractDir("D:/myTest.zip", "D:/myTest");return a.exec(); }運(yùn)行時(shí),依賴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。
執(zhí)行結(jié)果如下:
在JlCompress.h中,封裝了很多方法,支持對單文件、多文件、目錄等進(jìn)行壓縮,可以根據(jù)實(shí)際選擇使用。
本文涉及工程代碼:
https://gitee.com/bailiyang/cdemo/tree/master/Qt/59quazipTest/quazipTest
若對你有幫助,歡迎點(diǎn)贊、收藏、評論,你的支持就是我的最大動(dòng)力!!!
同時(shí),阿超為大家準(zhǔn)備了豐富的學(xué)習(xí)資料,歡迎關(guān)注公眾號“超哥學(xué)編程”,即可領(lǐng)取。
總結(jié)
以上是生活随笔為你收集整理的Qt基于QuaZIP实现文件压缩/解压(Linux下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器上的压缩文件怎么解压,什么是压缩文
- 下一篇: linux把一个大文件压缩,linux大