目录
1、QZipWriter
QZipWriter
是 Qt 提供的一个类,用于创建和管理 ZIP 文件。它属于 Qt 的 QtGui 模块,虽然在 Qt 6 中已经被移除,但在早期的 Qt 版本中,它被用作一种简便的方式来创建 ZIP 压缩包。QZipWriter
允许你创建一个 ZIP 文件,并向其中添加文件或目录。
2、主要功能
- 创建 ZIP 文件:可以创建新的 ZIP 文件并向其中添加文件和目录。
- 设置压缩策略:可以设置是否压缩文件。
- 写入数据:可以向 ZIP 文件中写入任意数据。
3、示例
#include <QCoreApplication>
#include <QFile>
#include <QDir>
#include <QDebug>
#include <QTextStream>
#include <QFileInfo>
#include "qzipwriter_p.h"
void addFileToZip(QZipWriter &zipWriter, const QString &filePath, const QString &zipPath) {
QFile file(filePath);
if (file.open(QIODevice::ReadOnly)) {
QZipWriter::FileInfo fileInfo;
fileInfo.isDir = false;
fileInfo.isFile = true;
fileInfo.filePath = zipPath;
fileInfo.size = file.size();
zipWriter.addFile(fileInfo.filePath, file.readAll());
file.close();
qDebug() << "Added file to zip:" << zipPath;
} else {
qWarning() << "Failed to open file for reading:" << filePath;
}
}
void addDirToZip(QZipWriter &zipWriter, const QString &dirPath, const QString &zipPath) {
QDir dir(dirPath);
if (!dir.exists()) {
qWarning() << "Directory does not exist:" << dirPath;
return;
}
QFileInfoList entries = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
for (const QFileInfo &entry : entries) {
QString newZipPath = zipPath.isEmpty() ? entry.fileName() : zipPath + "/" + entry.fileName();
if (entry.isDir()) {
zipWriter.addDirectory(newZipPath);
addDirToZip(zipWriter, entry.absoluteFilePath(), newZipPath);
} else {
addFileToZip(zipWriter, entry.absoluteFilePath(), newZipPath);
}
}
}
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
QString sourceDirPath = "path/to/source/folder";
QString zipFilePath = "path/to/target/zipfile.zip";
QFile zipFile(zipFilePath);
if (!zipFile.open(QIODevice::WriteOnly)) {
qWarning() << "Cannot open zip file for writing:" << zipFilePath;
return -1;
}
QZipWriter zipWriter(&zipFile);
zipWriter.setCompressionPolicy(QZipWriter::AutoCompress);
addDirToZip(zipWriter, sourceDirPath, "");
zipWriter.close();
zipFile.close();
qDebug() << "Folder successfully compressed to" << zipFilePath;
return 0;
}