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

你可能感兴趣的:(QT,qt)