Wie komprimiere ich ein Verzeichnis von Dateien mit C ++?

8

Ich arbeite an einem Projekt mit C ++, Boost und Qt. Ich verstehe, wie man einzelne Dateien und Bytestreams komprimiert, indem man zum Beispiel die qCompress () - Funktion in Qt verwendet.

Wie komprimiere ich ein Verzeichnis mit mehreren Dateien, einschließlich Unterverzeichnissen? Ich suche nach einer plattformübergreifenden (Mac, Win, Linux) Lösung; Ich würde es vorziehen, nicht eine Menge neuer Prozesse auszulösen.

Gibt es eine Standardmethode, um Bytestreams aus mehreren Dateien in ein gezipptes Archiv zu kombinieren, oder gibt es vielleicht eine Convenience-Funktion oder -Methode, die in der Boost iostream-Bibliothek verfügbar wäre?

Vielen Dank für die Hilfe.

Update : Die QuaZip-Bibliothek sieht wirklich gut aus. Es gibt ein Beispiel im Download-Paket (im Verzeichnis "Tests"), das sehr deutlich zeigt, wie man ein Verzeichnis von Dateien hochschnellt.

Update 2 : Nachdem ich diese Aufgabe in meiner Linux-Build-Umgebung abgeschlossen hatte, stellte ich fest, dass QuaZip mit dem Visual Studio-Compiler überhaupt nicht funktioniert. Es mag möglich sein, all diese Compiler-Fehler anzugehen, aber ein Wort der Vorsicht für jeden, der diesen Weg sucht.

    
martian 03.02.2009, 02:43
quelle

6 Antworten

9

Ich habe die folgenden zwei Bibliotheken gefunden:

  • ZipIOS ++ . Scheint "reines" C ++ zu sein. Sie listen Windows nicht explizit als unterstützte Plattform auf. Also denke ich, du solltest dein Glück selbst versuchen.
  • QuaZIP . Basierend auf Qt4. Sieht eigentlich nett aus. Sie listen Windows explizit auf (Using mingw). Anscheinend ist es ein C ++ Wrapper für [diese] Bibliothek.

Ah, und natürlich habe ich diese Seiten von diesem gerippt Qt Mailingliste Frage zum Zippen / Entpacken von Verzeichnissen:)

    
Johannes Schaub - litb 03.02.2009, 04:10
quelle
1
Dustin Getz 03.02.2009 03:53
quelle
1

Nur für den Rekord ...

Heute musste ich in Visual C ++ etwas sehr ähnliches tun. (Obwohl gewünscht, die Möglichkeit zu erhalten, das Projekt auf anderen Plattformen zu kompilieren; jedoch bevorzugt Qt nicht nur für diesen Zweck zu übernehmen.)

Beendet mit der Minizip -Bibliothek. Es ist in Plain C geschrieben, aber es war ein Kinderspiel, einen einfachen C ++ - Wrapper zu erstellen, und das Endergebnis funktioniert großartig, zumindest für meine Zwecke.

    
Reunanen 08.04.2009 15:30
quelle
0

Ich habe QuaZIP 0.4.3 unter Windows mit VisualStudio 2010 ausprobiert - es gibt immer noch Probleme, die aber leicht gelöst werden können.

Um mit VS zu bauen:

  1. Verwenden Sie CMake, um VS-Lösung für QuaZIP zu konfigurieren und zu generieren.
  2. Öffnen Sie die Lösung mit VS und erstellen Sie - Sie werden zuerst bemerken, dass sie 'zlib.h' nicht finden kann.
  3. Öffnen Sie die Einstellungen für das quazip-Projekt und fügen Sie den Pfad zu Qt's Zlib-Kopie zu C / C ++ hinzu - & gt; General- & gt; Zusätzliche Include-Verzeichnisse: $ (QTDIR) / src / 3rdparty / zlib.
  4. Erneut neu aufbauen und Sie erhalten viele Warnungen und einen Fehler. C2491: dllimport statisches Problem auf QuaZipFile :: staticMetaObject.
  5. Dies liegt daran, dass QuaZipFile wie "Klasse QUAZIP_EXPORT QuaZipFile" deklariert ist und QUAZIP_EXPORT zu Q_DECL_EXPORT für dll und zu Q_DECL_IMPORT für Anwendung aufgelöst werden muss, abhängig davon, ob QUAZIP_BUILD definiert ist oder nicht. Beim Aufbau von QuaZIP sollte QUAZIP_BUILD definiert werden, ist aber nicht - Konfigurationsprozess definiert im Fehlerfall völlig nutzlos "quazip_EXPORTS" statt.
  6. Um das Problem zu beheben, entfernen Sie einfach "quazip_EXPORTS" aus allen Build-Konfigurationen und fügen stattdessen QUAZIP_BUILD hinzu - QuaZIP wird nun in Ordnung sein.
Galadrius Krunthar 29.09.2011 22:22
quelle
0

Ich habe einen Wrapper um minizip gebaut, indem ich einige Funktionen hinzugefügt habe, die ich brauchte und es netter machte, sie zu benutzen. Es verwendet die neueste Version von C ++ 11 und wird mit Visual Studio 2013 entwickelt. Daher sollte es sofort einsatzbereit für Sie sein.

Es gibt eine vollständige Beschreibung hier: Ссылка

Sie können ganze Ordner, Streams, Vektoren usw. zippen. Ein nettes Feature ist auch, alles komplett im Speicher abzulegen.

    
Sebastian 26.07.2015 14:32
quelle
-1
%Vor%     
Adam Pierce 03.02.2009 03:46
quelle

Tags und Links