How to manage zip file
-
wrote on 15 Dec 2016, 07:23 last edited by VRonin 1 Oct 2017, 09:59
Hi. I have to manage a zip file (not gzip, just zip). Can somenone suggest me a way to do it (on both Linux and Windows)? qCompress and qUncompress does not work.
Regards.
-
Hi. I have to manage a zip file (not gzip, just zip). Can somenone suggest me a way to do it (on both Linux and Windows)? qCompress and qUncompress does not work.
Regards.
-
wrote on 15 Dec 2016, 07:49 last edited by VRonin 8 Feb 2018, 09:56
The only answer is zlib, you just need to decide the flavour
- QuaZIP (handles only .zip, wrapper around zlib)
- KArchive (supports multiple compression formats, for zip it's a wrapper on zlib)
- zlib if you don't mind C then you can use directly the reference library for zip files
I personally use KArchive because it's already conveniently wrapped in a Qt style and it can rely on the support of KDE
-
wrote on 15 Dec 2016, 08:56 last edited by VRonin
Hi. I'm trying to use quazip.
I have built quazip package without problem. When I try to runJlCompress::extractDir("a.zip", ".");
the probgram goes to crash.
.pro
windows { INCLUDEPATH += C:/Users/Denis/git/ControlloAccessi/quazip-0.7.2 INCLUDEPATH += C:/Users/Denis/git/ControlloAccessi/zlib128-dll/include LIBS += C:/Users/Denis/git/ControlloAccessi/quazip-0.7.2/quazip/release/quazip.lib }
main.cpp
#include "quazip/quazip.h" #include "QFile" #include "QDebug" #include <quazip/JlCompress.h> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); JlCompress::extractDir("a.zip", "b"); }
-
Hi. I'm trying to use quazip.
I have built quazip package without problem. When I try to runJlCompress::extractDir("a.zip", ".");
the probgram goes to crash.
.pro
windows { INCLUDEPATH += C:/Users/Denis/git/ControlloAccessi/quazip-0.7.2 INCLUDEPATH += C:/Users/Denis/git/ControlloAccessi/zlib128-dll/include LIBS += C:/Users/Denis/git/ControlloAccessi/quazip-0.7.2/quazip/release/quazip.lib }
main.cpp
#include "quazip/quazip.h" #include "QFile" #include "QDebug" #include <quazip/JlCompress.h> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); JlCompress::extractDir("a.zip", "b"); }
@mrdebug Did you try to debug to see what happens? Is it SIGSEGV or something else? Any error messages?
-
Hi. I'm trying to use quazip.
I have built quazip package without problem. When I try to runJlCompress::extractDir("a.zip", ".");
the probgram goes to crash.
.pro
windows { INCLUDEPATH += C:/Users/Denis/git/ControlloAccessi/quazip-0.7.2 INCLUDEPATH += C:/Users/Denis/git/ControlloAccessi/zlib128-dll/include LIBS += C:/Users/Denis/git/ControlloAccessi/quazip-0.7.2/quazip/release/quazip.lib }
main.cpp
#include "quazip/quazip.h" #include "QFile" #include "QDebug" #include <quazip/JlCompress.h> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); JlCompress::extractDir("a.zip", "b"); }
wrote on 15 Dec 2016, 09:31 last edited by VRonin@mrdebug said in How to manage zip file:
When I try to run
You are linking to the release version of quazip so make sure you run the release version of your app.
change
LIBS += C:/Users/Denis/git/ControlloAccessi/quazip-0.7.2/quazip/release/quazip.lib
intoCONFIG(debug, debug|release) { LIBS += -L"C:/Users/Denis/git/ControlloAccessi/quazip-0.7.2/quazip/debug" LIBS += -lquazipd }else { LIBS += -L"C:/Users/Denis/git/ControlloAccessi/quazip-0.7.2/quazip/release" LIBS += -lquazip }
Also make sure you make both Quazip.dll and zlib.dll (if you did not compile it as static) available at runtime
-
wrote on 15 Dec 2016, 10:08 last edited by
Sorry. I have missed the required dlls.
Is there a way to unzip a zip stream, from a QByteArray without to store it to a file before? -
wrote on 15 Dec 2016, 11:25 last edited by VRonin
yes with http://quazip.sourceforge.net/classQuaZip.html#ae52ebadd5ce64cdb49d7e198904b0b8c
create aQDataStream
operating on theQByteArary
and then passQDataStream::device()
to that constructor.On the other hand, I'm not sure what you are trying to do but you might not need QuaZip at all, have a look at http://doc.qt.io/qt-5/qbytearray.html#qCompress and below
-
wrote on 15 Dec 2016, 16:02 last edited by
Someting like this?
QDataStream BufferIn(&Source, QIODevice::ReadOnly); QuaZipFile quaZip(BufferIn.device()); qDebug() << quaZip.open(QIODevice::ReadOnly);
returns false...
-
wrote on 15 Dec 2016, 16:26 last edited by VRonin
QuaZipFile
represents a file inside a zip file, not a zip file in itself. the constructor you are calling is this one: http://quazip.sourceforge.net/classQuaZipFile.html#a1349ad27f1947bc3e346d83dbf9586c4 useQuaZip
instead.P.S.
QDataStream BufferIn(&Source, QIODevice::ReadOnly);
is the same asQDataStream BufferIn(Source);
-
wrote on 9 Jan 2017, 07:38 last edited by
After many tries I can't unzip something without to use a file.
These lines of codeQDataStream BufferIn(&QBABufferOut, QIODevice::ReadOnly); QuaZip quaZip(BufferIn.device());
does not seem to work.
-
Hi,
What do you have in QBABufferOut ?
Are you sure it's opened correctly ?
Why do you needBufferIn
for ?And most important, what do you mean by
does not seem to work
? That's to vague to help you. -
wrote on 10 Jan 2017, 07:31 last edited by
Please have a look at this sequence:
QuaZipFile quaZip(QBABufferOut); // (rapresents a zip archivie in ram). if (quaZip.open(QIODevice::ReadOnly)) { // QIODevice::ReadOnly or someting else qDebug() << "ok"; } else qDebug() << "error"; // always error!!!!!!!!!!!!
-
wrote on 10 Jan 2017, 08:26 last edited by VRonin 1 Oct 2017, 08:29
You have to open the QuaZip for decompression first:
QBuffer storageBuff(&QBABufferOut); QuaZip zip(&storageBuff); if (!zip.open(QuaZip::mdUnzip)) qDebug() << "error"; QuaZipFile file(&zip); for (bool f = zip.goToFirstFile(); f; f = zip.goToNextFile()) { QuaZipFileInfo fileInfo; file.getFileInfo(&fileInfo); qDebug() << fileInfo.name; file.open(QIODevice::ReadOnly); qDebug() << "Content: " << file.readAll().toBase64(); file.close(); } zip.close();
P.S.
// (rapresents a zip archivie in ram).
No it doesn't. As mentioned before QuaZipFile represent a file inside a zip archive, not the archive itself
-
wrote on 10 Jan 2017, 09:55 last edited by
It works perfectly.
Many thanks. -
The only answer is zlib, you just need to decide the flavour
- QuaZIP (handles only .zip, wrapper around zlib)
- KArchive (supports multiple compression formats, for zip it's a wrapper on zlib)
- zlib if you don't mind C then you can use directly the reference library for zip files
I personally use KArchive because it's already conveniently wrapped in a Qt style and it can rely on the support of KDE
wrote on 27 Sept 2021, 23:51 last edited by@VRonin said in How to manage zip file:
QuaZIP
Is there a license associated with the use of this? As I have a need for compressing large amounts of binary data that I need to transmit to remote clients.
-
@VRonin said in How to manage zip file:
QuaZIP
Is there a license associated with the use of this? As I have a need for compressing large amounts of binary data that I need to transmit to remote clients.
@SPlatten said in How to manage zip file:
Is there a license associated with the use of this?
-
wrote on 28 Sept 2021, 05:32 last edited by
Thank you,
-
wrote on 28 Sept 2021, 14:18 last edited by
@SPlatten if both ends are in your software I'd suggest agains using 3rd party library. qCompress and qUncompress work just fine in that regard. My usual approach is to supply a header (using QDataStream) with checksum and whatever else is needed, then stream to it output from compression routine. Works sufficiently well, eliminates the need for another dependency.
-
@SPlatten if both ends are in your software I'd suggest agains using 3rd party library. qCompress and qUncompress work just fine in that regard. My usual approach is to supply a header (using QDataStream) with checksum and whatever else is needed, then stream to it output from compression routine. Works sufficiently well, eliminates the need for another dependency.