我有一個我想壓縮的文件和文件夾的目錄。我正在使用qt-project quazip。所以我想我寫了一個函數,打包一個包含文件結構的目錄的所有內容。如何用quazip壓縮目錄/文件夾?
如何在zip文件中創建文件夾?我用QuaZipNewInfo嘗試過,但無法使其工作。
例如,我想這個內容壓縮tmp的文件夾:
tmp/1.txt
tmp/folder1/2.txt
tmp/folder1/3.txt
tmp/folder2/4.txt
tmp/folder2/folder3/5.txt
什麼用通用歸檔工具(歸檔工具)解壓文件後,我得到的是這樣的:
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);
什麼是錯誤消息,當它沒有工作? –
我沒有收到任何錯誤。當我想解壓縮文件時,它不會提取文件夾(因爲我可能不會將它們壓縮到zip !?)。因此,我將所有子文件夾的所有文件解壓到一個文件夾中。 – mrgremlin
我在下面編輯了我的答案。 –