1.下载quazip
https://github.com/stachenov/quazip/releases
2.使用
计划将quazip进行静态链接使用,将下载的quazip源码里面的quazip目录放到项目的quazip目录内,修改主项目的pro文件,引入quazip,
INCLUDEPATH += $$[QT_INSTALL_HEADERS]/QtZlib
include($$PWD/quazip/quazip.pri)
INCLUDEPATH += $$[QT_INSTALL_HEADERS]/QtZlib 这行是因为quazip引用了zlib库,这里设置quazip使用qt自带的zlib库。
include($$PWD/quazip/quazip.pri) 这个用于将quazip引入到项目中。
DEFINES += QT_DEPRECATED_WARNINGS QUAZIP_STATIC
需要在 DEFINES配置中增加QUAZIP_STATIC,说明是要进行静态编译链接,不需要什么dll文件。
然后就可以愉快的编译使用quazip啦。
不用参考以前的其他资料,还需要额外下载zlib源码,还需要对zlib进行编译拿到.dll,.lib..a等文件以后再编译quazip折腾一大通才能使用quazip,就加上上面的三行配置就OK了。
3.压缩文件夹到zip文件测试
#include <JlCompress.h>
JlCompress::compressDir("E:/a.zip", "E:/a"); //压缩
JlCompress::extractDir("E:/a.zip", "E:/b"); //解压缩
或者来自网上复杂一点的:
static void recurseAddDir(QDir d, QStringList & list) {
QStringList qsl = d.entryList(QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files);
foreach (QString file, qsl) {
QFileInfo finfo(QString("%1/%2").arg(d.path()).arg(file));
if (finfo.isSymLink())
return;
if (finfo.isDir()) {
QString dirname = finfo.fileName();
QDir sd(finfo.filePath());
recurseAddDir(sd, list);
} else
list << QDir::toNativeSeparators(finfo.filePath());
}
}
static bool archive(const QString & filePath, const QDir & dir, const QString & comment = QString("")) {
QuaZip zip(filePath);
zip.setFileNameCodec("utf-8");
if (!zip.open(QuaZip::mdCreate)) {
qDebug()<<zip.getZipError();
return false;
}
if (!dir.exists()) {
qDebug()<<dir.absolutePath() <<" not exists";
return false;
}
QFile inFile;
QStringList sl;
recurseAddDir(dir, sl);
QFileInfoList files;
foreach (QString fn, sl) files << QFileInfo(fn);
QuaZipFile outFile(&zip);
char c;
foreach(QFileInfo fileInfo, files) {
if (!fileInfo.isFile())
continue;
QString fileNameWithRelativePath = fileInfo.filePath().remove(0, dir.absolutePath().length() + 1);
inFile.setFileName(fileInfo.filePath());
if (!inFile.open(QIODevice::ReadOnly)) {
qDebug() << QString("testCreate(): inFile.open(): %1").arg(inFile.errorString().toLocal8Bit().constData());
return false;
}
if (!outFile.open(QIODevice::WriteOnly, QuaZipNewInfo(fileNameWithRelativePath, fileInfo.filePath()))) {
qDebug() << QString("testCreate(): outFile.open(): %1").arg(outFile.getZipError());
return false;
}
while (inFile.getChar(&c) && outFile.putChar(c));
if (outFile.getZipError() != UNZ_OK) {
qDebug() <<QString("testCreate(): outFile.putChar(): %1").arg(outFile.getZipError());
return false;
}
outFile.close();
if (outFile.getZipError() != UNZ_OK) {
qDebug() << QString("testCreate(): outFile.close(): %1").arg(outFile.getZipError());
return false;
}
inFile.close();
}
if (!comment.isEmpty())
{
zip.setComment(comment);
}
zip.close();
if (zip.getZipError() != 0) {
qDebug() << QString("testCreate(): zip.close(): %1").arg(zip.getZipError());
return false;
}
return true;
}