Qt开发(1) | 您所在的位置:网站首页 › 解压后exe文件无法打开 › Qt开发(1) |
目录
一、QProcess + 7z优点缺点实现
二、qCompress优点缺点实现
三、Qzipwriter优点缺点实现
四、QuaZIP优点缺点实现
五、参考资料
一、QProcess + 7z
优点
执行外部进程,WinRAR和7zip都可以 缺点依赖外部的压缩工具 实现(1) 导入库文件 将7z.dll 和7z.exe放到工程目录下 (2) 压缩 void zipFolder(const QString& path) { QString sourcePath = path + "/compressFolder"; QDir sourceFolderDir(sourcePath); if (!sourceFolderDir.exists()) return; QString binPath = "C:/"; // 替换成7z.exe实际所在文件夹位置 QString destinationFolder = "D:/"; QString zipName = "zipFold_2023"; QString arguments{"a", destinationFolder + "/" + zipName, sourcePath}; QProcess process; process.start(binPath + "/7z.exe", arguments); process.waitForFinished(); }(3) 解压缩 void unZipFolder(const QString& filePath) { if (!QFile::exists(filePath)) return; QString binPath = "C:/"; // 替换成7z.exe实际所在文件夹位置 QString destinationPath = "D:/"; QStringList arguments{ "x", "-o" + destinationPath, filePath, "-r", "-aoa" }; QProcess process; process.start(binPath + "/7z.exe", arguments); process.waitForFinished(); }(4) 检查库文件是否存在 在调用7z.exe之前,最好检查一下库文件是否存在 void checkDepends(const QString& binPath) { QStringList depends{"7z.exe", "7z.dll"}; for(const QString& file : depends){ QString strFile = binPath + "/" + file; if (!QFile::exists(strFile)) { qWarning() QFile read("E:/1.data"); read.open(QIODevice::ReadOnly); QByteArray data; data = read.readAll(); read.close(); data = qUncompress(data); QFile temp("E:/1.bmp"); temp.open(QIODevice::WriteOnly); temp.write(data); temp.close(); 三、Qzipwriter 优点Qt自己的库,生成zip格式 缺点在 pro 文件中,添加“QT += gui-private” 实现(1) 修改pro文件 QT += gui-private(2) 导入头文件 #include #include(3) 压缩 void zipWriter(QString path) { QZipWriter *writer = new QZipWriter(path + "/test.zip"); //添加文件夹 // writer->addDirectory(path + "/ss"); //添加文件 QFile file(path + "/test.txt"); if (!file.exists()) { return; } file.open(QIODevice::ReadOnly); writer->addFile("test.txt", file.readAll()); file.close(); writer->close(); }(4) 解压 void zipReader(QString path) { QZipReader reader(path + "/test.zip"); reader.extractAll(path); QFile file(path); file.open(QIODevice::WriteOnly); file.write(reader.fileData(QString::fromLocal8Bit("%1").arg(path + "/Desktop"))); file.close(); reader.close(); } 四、QuaZIP 优点适用于多种平台,且打包后的zip文件可以通过其它工具打开 缺点QuaZIP是使用Qt/C++对ZLIB进行简单封装的用于压缩及解压缩ZIP的开源库。 依赖Zlip,因此编译QuaZIP库需要依赖zlip库。 实现(1)接口说明 QuaZip中的JlCompress类用来压缩和解压缩文件 /** 压缩文件夹 参数一fileCompressed:压缩后的文件 参数二dir:待压缩的目录 参数三recursive:是否递归 **/ static bool compressDir(QString fileCompressed, QString dir = QString(), bool recursive = true); /** 解压缩文件夹 参数一fileCompressed:待解压缩的文件 参数二fileCompressed:解压缩存放的目录 **/ static QStringList extractDir(QString fileCompressed, QString dir = QString());(2) 配置 编好的QuaZip放入工程目录下 在工程中将quazip.lib所在库目录、头文件所在的目录添加到工程中。 pro中添加: LIBS += -L"D:/quazip/lib" -lquazip INCLUDEPATH += D:/quazip/src DEPENDPATH += D:/quazip/src(3) 压缩/解压缩 #include #include "JlCompress.h" // 导入QuaZip头文件 int main(int argc, char **argv) { QApplication app(argc,argv); // 压缩文件夹 JlCompress::compressDir("F:\\QuaZip.zip", "F:\\QuaZip"); // 解压缩文件夹 JlCompress::extractDir("F:\\QuaZip.zip", "F:\\ExtractQuaZip"); return app.exec(); } 五、参考资料Qt下压缩解压文件夹(2)Qzipwriter Qzipreader_黄权浩的博客-CSDN博客 利用Qt的qCompress和qUncompress来压缩和解压文件_prompty的博客-CSDN博客 Qt之zip压缩/解压缩-QuaZIP-阿里云开发者社区 |
CopyRight 2018-2019 实验室设备网 版权所有 |