在QT 5.15中使用quazip库进行静态编译链接

1.下载quazip

https://github.com/stachenov/quazip/releases

2.使用

计划将quazip进行静态链接使用,将下载的quazip源码里面的quazip目录放到项目的quazip目录内,修改主项目的pro文件,引入quazip,


INCLUDEPATH += $$[QT_INSTALL_HEADERS]/QtZlib

include($$PWD/quazip/quazip.pri)


INCLUDEPATH += $$[QT_INSTALL_HEADERS]/QtZlib 这行是因为quazip引用了zlib库,这里设置quazip使用qt自带的zlib库。

include($$PWD/quazip/quazip.pri)  这个用于将quazip引入到项目中。

DEFINES += QT_DEPRECATED_WARNINGS QUAZIP_STATIC

需要在 DEFINES配置中增加QUAZIP_STATIC,说明是要进行静态编译链接,不需要什么dll文件。

然后就可以愉快的编译使用quazip啦。

不用参考以前的其他资料,还需要额外下载zlib源码,还需要对zlib进行编译拿到.dll,.lib..a等文件以后再编译quazip折腾一大通才能使用quazip,就加上上面的三行配置就OK了。

3.压缩文件夹到zip文件测试

#include <JlCompress.h>


  JlCompress::compressDir("E:/a.zip", "E:/a");  //压缩
  JlCompress::extractDir("E:/a.zip", "E:/b"); //解压缩

或者来自网上复杂一点的: 

static void recurseAddDir(QDir d, QStringList & list) {
    QStringList qsl = d.entryList(QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files);
    foreach (QString file, qsl) {
        QFileInfo finfo(QString("%1/%2").arg(d.path()).arg(file));
        if (finfo.isSymLink())
            return;
        if (finfo.isDir()) {
            QString dirname = finfo.fileName();
            QDir sd(finfo.filePath());
            recurseAddDir(sd, list);
        } else
            list << QDir::toNativeSeparators(finfo.filePath());
    }
}

static bool archive(const QString & filePath, const QDir & dir, const QString & comment = QString("")) {

    QuaZip zip(filePath);
    zip.setFileNameCodec("utf-8");
    if (!zip.open(QuaZip::mdCreate)) {
        qDebug()<<zip.getZipError();
        return false;
    }

    if (!dir.exists()) {
        qDebug()<<dir.absolutePath() <<" not exists";
        return false;
    }

    QFile inFile;

    QStringList sl;
    recurseAddDir(dir, sl);

    QFileInfoList files;
    foreach (QString fn, sl) files << QFileInfo(fn);

    QuaZipFile outFile(&zip);

    char c;
    foreach(QFileInfo fileInfo, files) {

        if (!fileInfo.isFile())
            continue;
        QString fileNameWithRelativePath = fileInfo.filePath().remove(0, dir.absolutePath().length() + 1);

        inFile.setFileName(fileInfo.filePath());

        if (!inFile.open(QIODevice::ReadOnly)) {
            qDebug() <<  QString("testCreate(): inFile.open(): %1").arg(inFile.errorString().toLocal8Bit().constData());
            return false;
        }

        if (!outFile.open(QIODevice::WriteOnly, QuaZipNewInfo(fileNameWithRelativePath, fileInfo.filePath()))) {
            qDebug() << QString("testCreate(): outFile.open(): %1").arg(outFile.getZipError());
            return false;
        }

        while (inFile.getChar(&c) && outFile.putChar(c));

        if (outFile.getZipError() != UNZ_OK) {
            qDebug() <<QString("testCreate(): outFile.putChar(): %1").arg(outFile.getZipError());
            return false;
        }

        outFile.close();

        if (outFile.getZipError() != UNZ_OK) {
            qDebug() << QString("testCreate(): outFile.close(): %1").arg(outFile.getZipError());
            return false;
        }

        inFile.close();
    }

    if (!comment.isEmpty())
    {
        zip.setComment(comment);
    }

    zip.close();

    if (zip.getZipError() != 0) {
        qDebug() << QString("testCreate(): zip.close(): %1").arg(zip.getZipError());
        return false;
    }

    return true;
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

peihexian

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值