Qt压缩与解压:自带zip压缩QZipReader和QZipWriter

本文介绍了如何利用Qt库自带的QZipReader和QZipWriter类,无需额外编译zlib或quazip,轻松实现ZIP文件的解压缩和压缩。通过在项目文件中添加QT+=gui-private,然后引入头文件,可以方便地调用API进行文件的压缩和解压缩操作。解压缩方法是通过QZipReader的extractAll()函数,压缩则通过QZipWriter逐个添加文件到ZIP包中。
摘要由CSDN通过智能技术生成

         使用Qt自带类QZipReader和QZipWriter,不用再自行编译zlib、quazip,亲测简单快捷,使用方法如下:

1.在pro文件添加 QT += gui-private

2.添加下面两个头文件

#include "QtGui/private/qzipreader_p.h"
#include "QtGui/private/qzipwriter_p.h"

3. zip包解压缩


//! \brief zipReader    zip包解压缩
//! \param zipPath      压缩包路径
//! \param zipDir       解压缩目录
//! \return 是否解压成功
bool zipReader(QString zipPath="test.zip", QString zipDir="")
{
    QDir tempDir;
    if(!tempDir.exists(zipDir)) tempDir.mkpath(zipDir);
    QZipReader reader(zipPath);
    return reader.extractAll(zipDir);
}

4. 压缩zip包

//! \brief zipWriter    压缩zip包
//! \param zipPath      压缩包路径
//! \param fileList     需要压缩的文件列表
void zipWriter(QString zipPath="test.zip", QFileInfoList fileList=QFileInfoList())
{
    QZipWriter *writer = new QZipWriter(zipPath);

    // 遍历文件列表
    foreach (QFileInfo fileInfo, fileList) {
        //添加需要压缩的文件
        QFile file(fileInfo.filePath());
        if (!file.exists()) continue;
        file.open(QIODevice::ReadOnly);
        writer->addFile(fileInfo.fileName(), file.readAll());
        file.close();
    }
    writer->close();
    if(writer)
    {
        delete writer;
        writer = nullptr;
    }
}

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,针对你的问题,我可以给你一个简单的例子来使用Qt中的QZipReader和QZipWriter解压zip文件: ```cpp #include <QtCore> #include <QZipReader> #include <QZipWriter> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 假设我们要解压zip文件在工作目录下的test.zip QZipReader reader("test.zip"); if (!reader.exists()) { qWarning("The zip file does not exist!"); return -1; } // 将zip文件中的所有文件解压到工作目录的uncompressed目录下 QString outputDir = QDir::currentPath() + "/uncompressed"; if (!QDir(outputDir).exists()) { QDir().mkpath(outputDir); } for (QString filename : reader.fileNames()) { QFileInfo fileInfo(filename); QString outputPath = outputDir + "/" + fileInfo.fileName(); if (reader.extractFile(filename, outputPath)) { qDebug("Successfully extracted %s to %s", qPrintable(filename), qPrintable(outputPath)); } else { qWarning("Failed to extract %s", qPrintable(filename)); } } reader.close(); // 创建一个新的zip文件并将uncompressed目录下的所有文件压缩到其中 QZipWriter writer("new.zip"); QDirIterator it(outputDir, QDirIterator::Subdirectories); while (it.hasNext()) { it.next(); if (!it.fileInfo().isDir()) { QString relativePath = it.filePath().replace(outputDir + "/", ""); writer.addFile(relativePath, it.filePath()); } } writer.close(); return 0; } ``` 以上是一个简单的使用Qt中的QZipReader和QZipWriter解压zip文件的例子,希望能对你有所帮助。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值