pro文件需配置
QT += gui-private
代码
#include <QCoreApplication>
#include <QDir>
#include <QFile>
#include <QDebug>
#include "QZipReader.h"
// 解压
void extractZip(const QString& zipFilePath, const QString& outputDirPath)
{
// 打开ZIP文件
QFile zipFile(zipFilePath);
if (!zipFile.open(QIODevice::ReadOnly))
{
qWarning() << "无法打开ZIP文件:" << zipFilePath;
return;
}
// 创建QZipReader对象
QZipReader zipReader(&zipFile);
if (!zipReader.isReadable())
{
qWarning() << "无法读取ZIP文件:" << zipFilePath;
return;
}
// 创建输出目录
QDir outputDir(outputDirPath);
if (!outputDir.exists())
{
outputDir.mkpath(".");
}
// 获取ZIP文件中的文件信息并解压
const QVector<QZipReader::FileInfo> fileInfoList = zipReader.fileInfoList();
for (const QZipReader::FileInfo& fileInfo : fileInfoList)
{
if (fileInfo.isFile)
{
// 提取文件
QString filePath = outputDirPath + "/" + fileInfo.filePath;
QFileInfo info(filePath);
QDir dir(info.absoluteDir());
if(!dir.exists())
{
dir.mkpath(info.absoluteDir().path());
}
QFile outFile(filePath);
if (outFile.open(QIODevice::WriteOnly))
{
outFile.write(zipReader.fileData(fileInfo.filePath));
outFile.close();
qDebug() << "解压文件:" << filePath;
}
else
{
qWarning() << "无法创建文件:" << filePath;
}
}
else if (fileInfo.isDir)
{
// 创建目录
QDir().mkpath(outputDirPath + "/" + fileInfo.filePath);
qDebug() << "创建目录:" << outputDirPath + "/" + fileInfo.filePath;
}
}
}
// 压缩文件(压缩文件夹待实现)
void compressZip(const QStringList& fileNames, const QString& path)
{
QZipWriter zipWriter(path);
foreach(const QString & fileName, fileNames)
{
if (fileName.isEmpty())
{
continue;
}
QFileInfo fileInfo(fileName);
if (!fileInfo.exists())
{
continue;
}
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly))
{
continue;
}
// 添加文件
zipWriter.addFile(fileInfo.fileName(), file.readAll());
file.close();
//添加文件夹
//zipWriter.addDirectory(strDir);
}
zipWriter.close();
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString outputDirPath = "D:/";
QString zipFilePath = "D:/gui/Qt.zip";
extractZip(zipFilePath, outputDirPath);
return 0;
}