qt 5.12.5解压压缩
时间: 2025-03-19 20:11:22 浏览: 8
Qt 5.12.5 中文件解压与压缩的实现方法
在 Qt 5.12.5 中,可以通过第三方库 QuaZip
来完成 ZIP 文件的解压和压缩功能。以下是具体的实现方式:
使用 QuaZip 实现文件解压
为了使用 QuaZip 进行文件解压操作,首先需要确保已经成功编译并链接了 QuaZip 和 libz 库[^3]。以下是一个简单的代码示例展示如何通过 QuaZip 解压 ZIP 文件中的内容。
#include <QCoreApplication>
#include <QDebug>
#include "quazip/quazip.h"
#include "quazip/quazipfile.h"
void unzipFile(const QString &zipFilePath, const QString &outputDir) {
QuaZip zip(zipFilePath);
if (!zip.open(QuaZip::mdUnzip)) {
qWarning() << "Failed to open the zip file:" << zipFilePath;
return;
}
QuaZipFile zipFile(&zip);
while (zip.goToNextFile()) {
QFileInfo fileInfo(zip.getFileName());
QDir dir(outputDir + "/" + fileInfo.dir().path());
if (!dir.exists()) {
qDebug() << "Creating directory:" << dir.path();
dir.mkpath(".");
}
QFile outFile(outputDir + "/" + zip.getFileName());
if (!outFile.open(QIODevice::WriteOnly)) {
qWarning() << "Cannot create output file:" << outFile.fileName();
continue;
}
zipFile.open(QIODevice::ReadOnly);
outFile.write(zipFile.readAll());
zipFile.close();
outFile.close();
qDebug() << "Extracted file:" << zip.getFileName();
}
zip.close();
}
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QString zipFilePath = "example.zip"; // 输入 ZIP 文件路径
QString outputDir = "./unpacked"; // 输出目录路径
unzipFile(zipFilePath, outputDir);
return a.exec();
}
上述代码展示了如何利用 QuaZip 将指定的 ZIP 文件解压至目标目录中。需要注意的是,在实际项目中可能还需要处理异常情况以及更复杂的逻辑。
使用 QuaZip 实现文件压缩
同样地,也可以借助 QuaZip 完成文件或文件夹的压缩工作。下面是基于 QuaZip 的文件压缩示例代码。
#include <QCoreApplication>
#include <QDebug>
#include "quazip/quazip.h"
#include "quazip/quazipfile.h"
void compressFiles(const QStringList &files, const QString &zipFilePath) {
QuaZip zip(zipFilePath);
if (!zip.open(QuaZip::mdCreate)) { // 创建新的 ZIP 文件
qWarning() << "Failed to create new zip file:" << zipFilePath;
return;
}
foreach (const QString &filePath, files) {
QFile inFile(filePath);
if (!inFile.open(QIODevice::ReadOnly)) {
qWarning() << "Could not read input file:" << filePath;
continue;
}
QByteArray data = inFile.readAll();
QuaZipFile zipFile(&zip);
zipFile.setFileName(QFileInfo(filePath).fileName()); // 设置存档内的名称
if (!zipFile.open(QIODevice::WriteOnly, QuaZipNewInfo(QFileInfo(filePath).fileName()))) {
qWarning() << "Error creating entry in zip archive";
continue;
}
zipFile.write(data); // 写入数据到 ZIP 存档
zipFile.close(); // 关闭当前条目
}
zip.close(); // 关闭整个 ZIP 归档
qDebug() << "Compressed all specified files into" << zipFilePath;
}
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QStringList files; // 要压缩的文件列表
files << "file1.txt" << "file2.jpg";
QString zipFilePath = "archive.zip"; // 压缩后的 ZIP 文件名
compressFiles(files, zipFilePath);
return a.exec();
}
此部分实现了将多个文件打包进同一个 ZIP 文档的功能。如果希望支持递归压缩整个文件夹,则需扩展该函数来遍历子目录及其内部项。
部署注意事项
当开发的应用程序依赖于特定版本的 Qt(如 Qt 5.12.5),而目标机器上未安装相应版本或者存在不同版本冲突时,可以考虑采用静态编译或将所需动态库随应用程序一同分发的方式解决兼容性问题[^4]。不过这种方式可能会增加最终可执行文件大小,并且某些平台可能存在额外限制。
相关推荐


















