此类提供简单的解压缩功能,但相较于其他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