gpt4 book ai didi

c++ - 如何使用 quazip 压缩目录/文件夹?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:52 26 4
gpt4 key购买 nike

我有一个包含要压缩的文件和文件夹的目录。我正在为此使用 qt-project quazip。所以我想我写了一个函数来打包目录的所有内容,包括文件结构。

如何在 zip 文件中创建文件夹?我用 QuaZipNewInfo 试过了,但没成功。

例如,我想用以下内容压缩 tmp 文件夹:

tmp/1.txt
tmp/folder1/2.txt
tmp/folder1/3.txt
tmp/folder2/4.txt
tmp/folder2/folder3/5.txt

使用常用存档工具 (Archive Utility) 提取文件后,我得到的是:

tmp/1.txt
tmp/2.txt
tmp/3.txt
tmp/4.txt
tmp/5.txt

这是我目前所拥有的:

void Exporter::zipFilelist(QFileInfoList& files, QuaZipFile& outFile, QFile& inFile, QFile& inFileTmp)
{
char c;
foreach(QFileInfo file, files) {
if(file.isDir() && file.fileName() != "." && file.fileName() != "..") {
QFileInfoList infoList = QDir(file.filePath()).entryInfoList();
zipFilelist(infoList, outFile, inFile, inFileTmp);
}
if(file.isFile()) {
inFileTmp.setFileName(file.fileName());
inFile.setFileName(file.filePath());

if(!inFile.open(QIODevice::ReadOnly)) {
qDebug() << "testCreate(): inFile.open(): " << inFile.errorString().toLocal8Bit().constData();
}
QuaZipNewInfo info(inFileTmp.fileName(), inFile.fileName());
if(!outFile.open(QIODevice::WriteOnly, info)) {
qDebug() << "testCreate(): outFile.open(): " << outFile.getZipError();
}
while(inFile.getChar(&c)&&outFile.putChar(c)) ;
if(outFile.getZipError()!=UNZ_OK) {
qDebug() << "testCreate(): outFile.putChar(): %d"<< outFile.getZipError();
}

outFile.close();
if(outFile.getZipError()!=UNZ_OK) {
qDebug() << "testCreate(): outFile.close(): %d"<< outFile.getZipError();
}
inFile.close();
}
}
}

这就是我调用函数的方式:

QFileInfoList files = QDir(sourceFolder).entryInfoList();
QFile inFile;
QFile inFileTmp;
QuaZipFile outFile(&zip);
zipFilelist(files, outFile, inFile, inFileTmp);

最佳答案

I don't get any error. When I want to unzip the file it doesn't extract the folders (because I probably don't pack them into the zip!?). So I get all files of all subfolders unziped into one folder.

在您的函数中,您似乎递归地获取文件夹中的文件,但不是文件夹本身。当您递归查找子目录中的文件时,尝试创建一个文件夹将文件压缩到其中。

你可能想看看这个答案: https://stackoverflow.com/a/2598649/1819900

QuaZip 提供的实用程序怎么样? http://quazip.sourceforge.net/classJlCompress.html

关于c++ - 如何使用 quazip 压缩目录/文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13953528/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com