Qt之Quazip的编译与使用(压缩文件)

xiaoxiao2021-07-27  43

1.QuaZip的的编译依赖于zlib库 Zlib库下载地址: Zlib库的下载地址 QuaZip的下载地址 QuaZipde 下载地址 编译器: mingw32 Qt版本:Qt5.6.1; 本文下载的zlib库的版本是:zlib-1.2.11 2.Zlib的编译步骤: (1)解压zlib库; (2)启动Qt5.6 for DeskTop(MinGW4.9.2) (3)切换当前目录为zlib库 cd zlib-1.2.11 (4)命令行输入一下命令 copy win32\makefile.gcc makefile.gcc mingw32-make -f makefile.gcc 在当前目录下可以看到生成的库文件:libz.a、libz.dll.a、zlib1.dll 需要用到头文件:zconf.h、zlib.h 3.QuaZip编译 (1)添加头文件(上面提到的头文件) (2)添加库文件 LIBS +=./debug/libz.a ./debug/libz.dll.a ./debug/lzlib1.dll 注意:添加的路径一定要正确,并且有以上提到的三个库文件; 4.运行 在debug的目录中就可以找到quazipd.dll动态库 这种事debug模式下的调试,如果要使用release模式下的库,方法一样; 5.Quazip库的使用 QuaZip库可以试想文件的解压缩功能,在这里我只是使用到文件的压缩功能; 以下代码是文件和文件的压缩功能 头文件:

#ifndef ZIPDIR_H #define ZIPDIR_H #include "./include/JlCompress.h" #include <QThread> #include <QTime> class ZipDir : public QThread { Q_OBJECT public: explicit ZipDir(QObject *parent = 0); ~ZipDir(); virtual void run(); void setPath(QString systemfile,QString datafile,QString errorfile); public: QString systemPath; QString dataPath; QString errorPath; QTime tempTime; bool compressDir(QString path); bool removeDir(QString path); }; #endif // ZIPDIR_H

.cpp文件

#include "zipdir.h" #include <QThread> #include <QDateTime> #include <QDebug> ZipDir::ZipDir(QObject *parent) : QThread(parent) { systemPath=""; dataPath=""; errorPath=""; tempTime=QTime(11,33,0); } ZipDir::~ZipDir() { } void ZipDir::run() { while(1){ QDateTime currTime=QDateTime::currentDateTime(); qDebug()<<currTime.time().secsTo(tempTime); if(currTime.time().secsTo(tempTime)<300 && currTime.time().secsTo(tempTime)>0 ){ if(systemPath!=""){ compressDir(systemPath); } if(dataPath !=""){ compressDir(dataPath); } if(errorPath !=""){ compressDir(errorPath); } } } this->exec(); } void ZipDir::setPath(QString systemfile,QString datafile,QString errorfile) { systemPath=systemfile; dataPath=datafile; errorPath=errorfile; } bool ZipDir::compressDir(QString path) { QDir dir(path); if(!dir.exists()){ qDebug()<<"error"; return false; } //系统日志和数据日志 dir.setFilter(QDir::Dirs|QDir::NoDotAndDotDot); QFileInfoList list=dir.entryInfoList(); qDebug()<<list.count(); for (int i=0;i<list.count();i++){ QFileInfo info=list.at(i); qDebug()<<info.fileName(); QString filename=info.fileName(); QString file=path+"/"+filename; qDebug()<<file; QString compressed=file+".zip"; JlCompress::compressDir(compressed,file); if(info.isDir()){ removeDir(file); } } //错误日志 if(list.count()<=0){ QDir dir2(path); dir2.setFilter(QDir::Files); QStringList namefilter; namefilter<<"*.txt"; dir2.setNameFilters(namefilter); QFileInfoList listerror=dir2.entryInfoList(); qDebug()<<listerror.count(); QString compressFiles=path+"/"+ QDateTime::currentDateTime().toString("yyyy_MM_dd") + ".zip"; QStringList fileList; fileList.clear(); for(int i=0;i<listerror.count();i++){ QFileInfo infoerr=listerror.at(i); QString fileErrName=infoerr.fileName(); QString filePath=path+"/"+fileErrName; qDebug()<<filePath; fileList<<filePath; } if(listerror.count()!=0){ JlCompress::compressFiles(compressFiles,fileList); } //删除错误日志文件 for(int i=0;i<listerror.count();i++){ QFileInfo infoerr=listerror.at(i); QFile tempFile(infoerr.filePath()); tempFile.remove(); } } return true; } bool ZipDir::removeDir(QString path) { QDir dir(path); QFileInfoList fileList; QFileInfo curFile; if(!dir.exists()){ qDebug()<<"error"; return false; } dir.setFilter(QDir::Files); fileList=dir.entryInfoList(); for(int i=0;i<fileList.count();i++){ curFile=fileList.at(i); if(curFile.isFile()){ QFile tempFile(curFile.filePath()); tempFile.remove(); } } dir.rmdir("."); return true; }

main.cpp

#include <QCoreApplication> #include "./include/JlCompress.h" #include <QDebug> #include <QDateTime> #include "zipdir.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); ZipDir dir; QString str1="E:/Work/build-ServerPro-Debug/debug/system"; QString str2="E:/Work/build-ServerPro-Debug/debug/datalog"; QString str3="E:/Work/build-ServerPro-Debug/debug/errlog"; dir.setPath(str1,str2,str3); dir.start(); return a.exec(); }