QZip

此类提供简单的解压缩功能,但相较于其他c++的zip开源库还是有很多缺点,只能实现简单的解压缩
使用此类必须安装qt的source源码

//qmake和头文件
QT += core gui gui-private
#include "QtGui/private/qzipreader_p.h"
#include "QtGui/private/qzipwriter_p.h"

QZipWriter

QZipWriter* writer = new QZipWriter(m_savePath + "/QtZip1.zip");//创建一个writer并指定保存路径
QZipWriter::CompressionPolicy policy = writer->compressionPolicy();
writer->setCompressionPolicy(QZipWriter::AutoCompress);//设置压缩方式

QFile file(m_zipFile);
if (!file.exists()) {
    return;
}
QFileInfo fileInfo(m_zipFile);
 
file.open(QIODevice::ReadOnly);//先打开要压缩的文件
writer->addFile(fileInfo.fileName(), file.readAll());//使用addFile接口,读取文件数据并压缩进去
file.close();

writer->addDirectory("lib");//往压缩包里添加一个目录
writer->addFile("lib/" + fileInfo.fileName(), file.readAll());//要压缩到新加的目录,必须添加前缀

writer->close();//必须关闭,不然会出现错误

QZipReader

	QZipReader zipreader(filepath);//打开要解压的压缩包路径
 
    for(auto fileInfo : zipreader.fileInfoList()){//reader有一个list保存了其所有压缩的文件信息
        if(fileInfo.isFile){
            QFile file(savepath + "/" + fileInfo.filePath);//指定解压后的文件路径
            file.open(QIODevice::WriteOnly);
            //注意编码问题
            QByteArray dt = fileInfo.filePath.toUtf8();
            QString strtemp = QString::fromLocal8Bit(dt);
 
            QByteArray array = zipreader.fileData(strtemp);//通过list中的文件路径来读取文件内容
            file.write(array);//写入解压后的文件
            file.close();
        }else if(fileInfo.isDir){//若是目录则创建新目录即可
            CreateFolder(savepath + "/" + fileInfo.filePath);
        }
    }
 
    zipreader.close();//最后记得close

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值