Frage

Ich arbeite an einem Projekt mit C ++, Boost, und Qt. Ich verstehe, wie einzelne Dateien und Bytestreams komprimieren, indem zum Beispiel der qCompress () Funktion in Qt.

Wie zip ich ein Verzeichnis von mehreren Dateien, einschließlich Unterverzeichnisse? Ich bin für eine Cross-Plattform (Mac, Win, Linux) Lösung; Ich würde es vorziehen, nicht ein paar neue Prozesse abzufeuern.

Gibt es eine Standardmethode Bytestreams aus mehreren Dateien in ein ZIP-Archiv zu kombinieren, oder vielleicht gibt es eine Komfortfunktion oder Verfahren, die in der Boost-iostream-Bibliothek zur Verfügung stehen würden?

Vielen Dank für die Hilfe.

Aktualisieren : Die QuaZip Bibliothek sieht wirklich toll. Es gibt ein Beispiel in dem Download-Paket (in dem „Tests“ dir), die sehr deutlich zeigen, wie ein Verzeichnis der Dateien zippen.

Update 2 : Nach Abschluss dieser Aufgabe auf meinem Linux-Build-Umgebung, entdeckte ich, dass QuaZip haupt nicht mit dem Visual Studio-Compiler nicht funktioniert. Es kann möglich sein, all die Compiler-Fehler zu bekämpfen, aber ein Wort der Vorsicht zu jemandem diesem Weg nach unten.

War es hilfreich?

Lösung

Ich habe die beiden folgenden Bibliotheken gefunden:

  • zipios ++ . Scheint „reinen“ C ++ zu sein. Sie führen Windows nicht explizit als unterstützte Plattform. Also ich denke, Sie sollten versuchen, sich selbst Ihr Glück.
  • QuaZIP . Basierend auf Qt4. Eigentlich sieht nett aus. Sie führen Windows-explizit (mit mingw). Offenbar ist es eine C ++ Wrapper für [diese] Bibliothek.

Ach, und natürlich, ich habe diese Seiten zerrissen von diese Qt Mailingliste Frage zu Zipping / Entpacken von Verzeichnissen:)

Andere Tipps

Nur für das Protokoll ...

Heute brauchte ich etwas sehr ähnliches in Visual C ++ zu tun. (Obwohl wollte die Möglichkeit offen zu halten, das Projekt auf anderen Plattformen zu kompilieren;. Bevorzugte jedoch nicht Qt nur für diesen Zweck zu übernehmen)

am Ende mit der Minizip Bibliothek. Es ist einfach in C geschrieben, aber eine einfache C ++ Wrapper um es der Ausarbeitung war ein Kinderspiel, und das Endergebnis funktioniert gut, zumindest für meine Zwecke.

I QuaZIP versuchte 0.4.3 unter Windows mit Visual Studio 2010 - gibt es Probleme nach wie vor, kann aber leicht gelöst werden

.

mit VS erstellen:

  1. Verwenden Sie CMake zu konfigurieren und VS-Lösung für QuaZIP zu erzeugen.
  2. Öffnen soltion mit VS und bauen -. Sie zunächst feststellen, dass es nicht ‚zlib.h‘ finden kann
  3. Öffnen Voreinstellungen für quazip Projekt, und fügen Pfad zu Qt-Kopie von Zlib zu C / C ++ -> Allgemein-> Zusätzliche Includeverzeichnisse. $ (QTDIR) / src / 3rdparty / zlib
  4. Rebuild wieder und Sie werden viele Warnungen und ein Fehler C2491 erhalten: Dllimport statische Ausgabe auf QuaZipFile :: staticMetaObject
  5. .
  6. Das ist, weil QuaZipFile wie „Klasse QUAZIP_EXPORT QuaZipFile“ deklariert und QUAZIP_EXPORT muss aufzulösen für dll Q_DECL_EXPORT und für die Anwendung auf Q_DECL_IMPORT, basierend darauf, ob QUAZIP_BUILD definiert ist oder nicht. Beim Bau QuaZIP QUAZIP_BUILD definiert werden soll, ist aber nicht -. Konfigurationsprozess fehlerhaft definiert völlig nutzlos „quazip_EXPORTS“ statt
  7. Um dies zu beheben, entfernen Sie einfach "quazip_EXPORTS" aus allen Build-Konfigurationen und fügen Sie QUAZIP_BUILD statt - QuaZIP wird nun fein bauen
  8. .

Ich habe einen Wrapper um minizip einige Features hinzugefügt gebaut, die ich brauchte, und macht es schöner, es zu benutzen. Ist funktioniert die neuesten c ++ verwenden 11 und Visual Studio 2013 entwickelt wird, so dass es für Sie out-of-the-Box funktionieren soll.

Es gibt eine vollständige Beschreibung hier: https://github.com/sebastiandev/zipper

Sie können ganze Ordner zip, strömt, Vektoren, etc. Auch ein nettes Feature alles vollständig im Speicher tut.

system("zip myarchive.zip *");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top