.DAT file not extracted using Quazip library in qt
-
wrote on 28 May 2021, 04:42 last edited by
I am trying to extract .DAT file using Quazip library in Qt 5.14. I integrated this quazip library into my project and try to extract files using it. .txt file is get extracted but .DAT file is not get extracted. .DAT files are created but it does not contain any data. Here is my source code
bool fileHelper::extractAll( QString folderPath, QString filePath ) { QuaZip zip(filePath); zip.open(QuaZip::mdUnzip); bool isSuccess = false; for(bool f=zip.goToFirstFile(); f; f=zip.goToNextFile()) { // set source file in archive QString filePath = zip.getCurrentFileName(); QuaZipFile zFile( zip.getZipName(), filePath ); // open the source file zFile.open( QIODevice::ReadOnly ); // create a bytes array and write the file data into it //QByteArray ba = zFile.read() QByteArray ba = zFile.readAll(); // close the source file zFile.close(); // set destination file //QFile dstFile( getfileStoreRootDir()+filePath ); QFile dstFile( folderPath+filePath ); qDebug() << "dstFile :" << dstFile; // open the destination file dstFile.open( QIODevice::WriteOnly | QIODevice::Text ); // write the data from the bytes array into the destination file dstFile.write( ba.data() ); //close the destination file dstFile.close(); //mark extraction sucess isSuccess = true; } zip.close(); return isSuccess; }
Please tell me am I doing something wrong or any other extra flag or something is required for it.
-
You should check if the file which not gets extracted really contains data with another program which can extract zip files.
Then add some debug output to see the size of ba which is returned by zFile.readAll(). AlsoIODevice::Text
is for sure not correct for non text-files.
And you should check if QFile::open() and write() really succeed - they have return values for a reason... -
wrote on 28 May 2021, 06:54 last edited by
yes I tried that. if I directly extract zip file then the 3mb file is created but when I tried to extract using code then 0kb file is created. and I also print debug log for ba, it prints nothing.
-
Then there seems to be a problem inside QUAZip - nothing we can do against.
-
wrote on 28 May 2021, 06:56 last edited by
so can you suggest any other library or method which solves this problem
-
QUZiap is open source. Simply debug into the functions to see what's going wrong in there.
-
wrote on 28 May 2021, 08:13 last edited by VRonin
Try this:
bool fileHelper::extractAll(QString folderPath, QString filePath) { QuaZip zip(filePath); if(!zip.open(QuaZip::mdUnzip)) return false; QuaZipFile file(&zip); for(bool f=zip.goToFirstFile(); f; f=zip.goToNextFile()){ if(!file.open(QIODevice::ReadOnly)) return false; QFile dstFile(folderPath+zip.getCurrentFileName()); if(!dstFile.open(QIODevice::WriteOnly)) return false; while(!file.atEnd()) dstFile.write(file.read(1024*1024)); dstFile.close(); file.close(); } zip.close(); return true; }
If it still doesn't work
can you suggest any other library
KArchive
https://api.kde.org/frameworks/karchive/html/index.html -
wrote on 29 May 2021, 08:42 last edited by
it worked. thanks @VRonin
3/8