Qt下压缩解压文件夹(2)Qzipwriter Qzipreader

使用了Qt的库来进行压缩解压的。

修改pro文件

QT       += gui-private

导入头文件

#include <private/qzipwriter_p.h>
#include <private/qzipreader_p.h>

压缩

void zipWriter(QString path)
{
    QZipWriter *writer = new QZipWriter(path + "/test.zip");
    //添加文件夹
//    writer->addDirectory(path + "/ss");
    //添加文件
    QFile file(path + "/test.txt");
    if (!file.exists())
    {
        return;
    }
    file.open(QIODevice::ReadOnly);
    writer->addFile("test.txt", file.readAll());
    file.close();
    writer->close();
}

解压

void zipReader(QString path)
{
    QZipReader reader(path + "/test.zip");
    reader.extractAll(path);

    QFile file(path);
    file.open(QIODevice::WriteOnly);
    file.write(reader.fileData(QString::fromLocal8Bit("%1").arg(path + "/Desktop")));
    file.close();
    reader.close();
}

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
你可以使用 Qt 的 QZipWriter 和 QZipReader 类来压缩解压文件夹。 下面是一个简单的示例: ```cpp // 压缩文件夹 QString sourceFolderPath = "/path/to/source/folder"; QString zipFilePath = "/path/to/zip/file.zip"; QDir sourceDir(sourceFolderPath); QFileInfoList fileInfoList = sourceDir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); QFile zipFile(zipFilePath); zipFile.open(QIODevice::WriteOnly); QZipWriter zipWriter(&zipFile); foreach (QFileInfo fileInfo, fileInfoList) { QString filePath = fileInfo.absoluteFilePath(); QString relativeFilePath = sourceDir.relativeFilePath(filePath); if (fileInfo.isDir()) { zipWriter.addDirectory(relativeFilePath); } else { QFile file(filePath); file.open(QIODevice::ReadOnly); QByteArray fileData = file.readAll(); zipWriter.addFile(relativeFilePath, fileData); } } zipWriter.close(); // 解压文件夹 QString extractFolderPath = "/path/to/extract/folder"; QString extractZipFilePath = "/path/to/zip/file.zip"; QFile extractZipFile(extractZipFilePath); extractZipFile.open(QIODevice::ReadOnly); QZipReader zipReader(&extractZipFile); foreach (auto fileInfo, zipReader.fileInfoList()) { QString fileName = fileInfo.name; QString filePath = extractFolderPath + "/" + fileName; if (fileInfo.isDir()) { QDir().mkpath(filePath); } else { QFile file(filePath); file.open(QIODevice::WriteOnly); file.write(zipReader.fileData(fileName)); file.close(); } } zipReader.close(); ``` 在这个示例中,我们首先使用 `QDir` 和 `QFileInfo` 类获取文件夹中的所有文件和子文件夹。然后我们使用 `QZipWriter` 类将这些文件和文件夹压缩到一个 zip 文件中。注意,我们在添加文件夹时使用了 `addDirectory` 方法。 在解压部分,我们首先使用 `QZipReader` 类打开 zip 文件,然后获取其中的所有文件信息。对于每个文件,我们检查它是否为文件夹,如果是,我们使用 `QDir` 类创建一个新的文件夹。如果不是,我们使用 `QFile` 类创建一个新文件,并将 zip 文件中的数据写入该文件。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

黄权浩

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值