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

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();
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值