my-QT专栏

QT ZIP

2021-10-14  本文已影响0人  c之气三段

资源静态及用法
https://blog.csdn.net/zhangxuechao_/article/details/83014473
动态可获取压缩文件个数

//引入方法
#include "quazip/quazip.h"
#include "quazip/quazipfile.h"
//使用方法(非静态)
 QString path = GlobalData::WORKSPACE;
    QDir dir(path);
    if(!dir.exists())
        dir.mkdir(path);
    QString zipPath = QCoreApplication::applicationDirPath() + QDir::separator() + CALC_PACKAGE_NAME;
    // 读取压缩文件
    QuaZip archive(zipPath);
    if (!archive.open(QuaZip::mdUnzip))
        return ;
    QString dstPath = path;//相对路径一级目录
    dstPath.append("/");
    int zipCount = archive.getEntriesCount();  // 压缩实体数量(文件或文件夹)
    int i = 0;  // 已解压数量
    QByteArray data;
    QuaZipFile zipFile;
    QFile dstFile;
    for (bool f = archive.goToFirstFile(); f; f = archive.goToNextFile())
    {
        QString fileName;//文件名
        fileName = archive.getCurrentFileName();
        QString zipFileName = archive.getZipName();//压缩包路径
        zipFile.setZipName(zipFileName);
        zipFile.setFileName(fileName);
        zipFile.open(QIODevice::ReadOnly);
        data = zipFile.readAll();
        zipFile.close();
        if (fileName.endsWith("/"))
        {
            dir.mkpath(fileName);
            i++;
        }
        else
        {
            fileName = dstPath + fileName;
            dstFile.setFileName(fileName);
            if (!dstFile.open(QIODevice::WriteOnly))
            {
                return ;
            }
            dstFile.write(data);
            dstFile.close();
            i++;
        }
        emit signal_zipStep(zipCount,i);//触发信号发送压缩步骤
    }
上一篇 下一篇

猜你喜欢

热点阅读