前言
在Qt中进行压缩和解压缩操作,您可以使用以下几种第三方库:
1.Quazip
QuaZIP是一个使用Qt和C++封装ZLIB的库,专门用于压缩和解压缩ZIP文件。它支持压缩和解压缩单个文件、多个文件以及整个目录,并且可以处理ZIP文件内的文件信息。QuaZIP是一个流行的选择,因为它易于集成到Qt项目中,并且提供了丰富的API来处理压缩文件.
2.JlCompress
JlCompress是一个用于处理压缩文件的库,它能够处理包括7z在内的多种压缩格式。这个库提供了一系列的静态方法来压缩和解压缩文件,使其成为Qt环境中处理压缩文件的有力工具。
3.Zlib
Zlib是一个广泛使用的开放源代码库,提供了无损数据压缩和解压缩功能。虽然Qt本身并不直接提供Zlib的接口,但您可以将Zlib库集成到Qt项目中,并使用其提供的qCompress
和qUncompress
函数进行基本的压缩和解压缩操作
如何在Qt项目中使用这些库 三步走
我这里是创建了一个小项目Quazip
1.第一步: 下载和安装库
从相应的资源下载所需的库文件,并将它们放置在您的项目结构中。
这里为大家提供这三种库的下载链接:点我下载 里面有我们需要的头文件及库文件
链接: https://pan.baidu.com/s/1s0IoFCj309QYVi9wayHPNA 提取码: xhyq
2.第二步:配置.pro文件,编译链接库文件
这里采用的是动态链接库文件
把下载好的文件放入创建好的项目目录里:
并且在项目的.pro
文件中添加库的路径和链接指令。如图
代码如下:
LIBS += -L$$PWD/third_party/quazip/dll -lquazip
LIBS += -L$$PWD/third_party/zlib/dll -lzlib1
LIBS += -L$$PWD/third_party/dll -lws2_32
其中 `$$ PWD` 是当前工作目录的路径,`-L` 后跟库文件的路径,`-l` 后跟库文件名(不含文件扩展名)。
3.第三步:执行qmake 然后添加头文件
右击项目文件点执行qmake
然后 根据使用需要包含库文件,我提供的下载文件不止这几个头文件,我这儿举个例子
接下来就可以使用这些库提供的api 开始愉快的写代码时光啦 哈哈哈哈哈哈
案例
这里我就介绍一下JlCompress库的案例吧,这个库蛮好用的,提供了现成的静态方法去压缩和解压缩文件或者压缩文件目录都可以,这样我们就不用自己去封装一些方法去压缩解压缩,这样子不仅安全还不容易出错。
1.压缩解压缩单个文件
压缩单个文件的方法
函数原型
static bool JlCompress::compressFile(
const QString &fileCompressed,
const QString &file);
fileCompressed
: 压缩后文件的名称。file
: 要压缩的原始文件的路径。
QString fileName = QFileDialog::getOpenFileName(this,"打开文件","D:/","Files()*.json");
QString compressedFile = "D:/a/a.7z"; // 这里是我们压缩后的文件存放地址,后缀名可以自己定义
bool success = JlCompress::compressFile(compressedFile,fileName);
if (success) {
qDebug() << "File compressed successfully.";
} else {
qDebug() << "Failed to compress file.";
}
}
执行后结果:压缩成功保存到D盘a目录下
解压缩压缩包中单个文件方法
函数原型:
static QString JlCompress::extractFile(
const QString &fileCompressed,
const QString &fileName,
const QString &fileDest = QString());
fileCompressed
: 压缩文件的名称。fileName
: 要从中提取的文件的名称。fileDest
: 可选参数,指定提取到的目标文件路径。如果省略此参数,默认提取到当前工作目录。
QString extractedFilePath = JlCompress::extractFile("D:/a/a.7z", "example.json", "D:/a");
if (!extractedFilePath.isEmpty()) {
// 提取成功
qDebug() << "File extracted successfully:" << extractedFilePath;
} else {
// 提取失败
qDebug() << "Failed to extract file." << JlCompress::getZipError();
}
运行后成功解压缩:
2.压缩解压缩整个目录
压缩目录下的所有文件
函数原型:
static bool JlCompress::compressDir(
const QString &fileCompressed,
const QString &dir = QString(),
bool recursive = true);
fileCompressed
: 压缩后文件的名称。dir
: 要压缩的目录的路径。recursive
: 可选参数,指示是否递归地压缩子目录。默认为true
。
代码:
bool result = JlCompress::compressDir("D:/b/compress.zip", "D:/a", true);
if (result) {
// 成功
qDebug() << "File compressed successfully:" ;
} else {
// 失败
qDebug() << "Failed to compress file.";
}
运行成功:
解压缩压缩包中的所有文件
函数原型:
static QStringList JlCompress::extractDir(
const QString &fileCompressed,
const QString &dir = QString());
dir
: 可选参数,指定提取到的目标目录路径。如果省略此参数,默认提取到当前工作目录。fileCompressed
: 压缩文件的名称。- 如果提取操作成功,该函数返回包含所有提取文件路径的
QStringList
;如果失败,返回空列表。
代码:
QStringList extractedFiles = JlCompress::extractDir("D:/b/compress.zip", "D:/r");
if (!extractedFiles.isEmpty()) {
// 提取成功
foreach (const QString &file, extractedFiles) {
qDebug() << "File extracted:" << file;
}
} else {
// 提取失败
qDebug() << "Failed to extract directory.";
}
运行成功:
好了,希望大家也能成功运行,看完能帮助到你们