Qt 实现解压压缩包

383 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情

前提要点

在昨天已经更新了关于QT实现将文件夹打成压缩包,今天应该挨到解压了,东平西凑终于完成了压缩包的基本处理!

解压在上网一搜,全部都是统一的答案,我本想着按着方法用,但是老天不饶我!没有使用成功!在后续也有找别的方法,但是都不太行,因此我将他改了改!终于可以被我使用!

第一步:先将压缩包使用解压模式打开,QuaZip::mdUnzip这个是最通用的一种方式,并且都到的帖子下面都有详细展示,我就不一一重复了。

QuaZip zip(zipPath);
    zip.open(QuaZip::mdUnzip); 

第二步:将文件夹打开,并且判断一下这个文件夹是否存在,如果不存在的话再建一个。但是这个创建文件夹的方式我是用的是自己建的一个类,大家可以把它换做通用方式。

QDir tempDir(zipDir);
if(!tempDir.exists(zipDir))
    dir.mkdir(zipDir);

goToFirstFile():他是用来将当前文件设置为存档的第一个文件,

goToNextFile:他是用来将将当前文件设置为存档中的下一个文件 因此可以用他们来设置一个循环


    for (bool suc = zip.goToFirstFile(); suc; suc = zip.goToNextFile())
    {
        QFile dstFile;
        //实际的文件处理
        QuaZipFile zipFile;
        QString qsTempZipName = zip.getZipName();
        zipFile.setZipName(qsTempZipName);
        QString filename = zip.getCurrentFileName();

getCurrentFileNameta:他所获取的是当前文件的路径(看清楚了,是文件路径,不是文件夹的路径!!)

       zipFile.setFileName(filename);
       bool bOpen = zipFile.open(QIODevice::ReadOnly, "123456");
       if(bOpen == false)
           return false;
       QByteArray data = zipFile.readAll();
       zipFile.close();

zipFile.open(QIODevice::ReadOnly, "123456") 第一个属性 是表示压缩包为仅读取模式,后面的内容填密码就好啦,因为我所有的密码都一样,所以直接填了,大家也可以通过传参来填密码。

接下来将数据重新存储就好啦!

最后一定要记得关闭!!!不管写什么都一定要有始有终!!!!不然会出很多的问题。

    }
    zip.close();

今天的更新到此结束 希望各位大佬批评指正!