10 Stimmen

C++ plattformübergreifender zlib simplifer-wrapper

Ich bin auf der Suche nach einem Wrapper, der zlib zu destillieren:

  1. OpenZipFile()
  2. GetItemInfo(n)
  3. UnzipItem(n) // Bonuspunkte für rekursives Entpacken, wenn Element n ein Verzeichnis ist.

Ich sehe eine Menge Wrapper um die zlib-Bibliothek auf, sagen wir, codeproject.com, aber sie sind alle plattformspezifisch, um die zusätzliche plattformspezifische Funktionalität des Entpackens in eine Datei/Speicherpuffer/Rohrleitung bereitzustellen.

0 Stimmen

Sie haben also bereits ein Projekt auf codeproject gefunden, das genau das tut, was Sie wollen, dann bleibt Ihnen nur noch eines übrig: FILE *file = fopen(filename, "wb"); fwrite(buf, buf_len, 1, file); fclose(file);

13voto

In boost::iostreams gibt es die Möglichkeit, die Formate zlib, gzip und bzip2 zu verwenden.

Sie finden es bei http://www.boost.org/

2 Stimmen

Boost::iostream::zlib_compressor ist nicht mit dem aktuellen zip-Format kompatibel

9voto

Nicolas Punkte 1474

Im zlib-Quellarchiv gibt es einen Beitrag namens "minizip".

"minizip" ist ein Satz von Dateien, die Sie verwenden können, um mit .zip-Dateien zu spielen. Die grundlegenden Dienste, die Sie benötigen, sind bereits vorhanden:

  • unzOpen
  • unzLocateFile
  • unzOpenCurrentFile
  • unzGetCurrentFileInfo
  • unzCloseCurrentFile
  • unzClose

Natürlich ist dies nicht objektorientiert (und ich bin mir sicher, dass dies nicht das Ziel des Schöpfers von minizip war), aber das Schreiben eines einfachen objektorientierten Wrappers sollte einfach sein.

0 Stimmen

Wow, die Dateien sind 8 Jahre alt! heheh!

0 Stimmen

Es ist in cvs; nun ja, ich schätze, das war es, was sie damals für die Versionskontrolle hatten.

1 Stimmen

Hey, es ist mir egal, ob es 8 Jahre alt ist, wenn es immer noch kompiliert werden kann, werde ich es benutzen!

4voto

Ben Bryant Punkte 2985

firstobjects einfache zlib bleibt plattformübergreifend; es hat zlib in einer einzigen Datei easyzlib.c und stellt nur die Funktionen ezcompress und ezuncompress zur Verfügung, mit der zusätzlichen Möglichkeit, den Speicherbedarf zu ermitteln, bevor die genaue Größe zugewiesen wird.

2voto

Vicent Marti Punkte 7037

Sie könnten versuchen, den Code aus einem anderen FOSS-Projekt zu übernehmen. ScummVM, zum Beispiel, hat einen hochportablen Zlib-Wrapper ( Umsetzung , Kopfzeile ) mit allen benötigten Funktionen und einer OO-Schicht, die eine generische Schnittstelle zu allen anderen Arten von Archiven bildet.

Vielleicht ist das ein guter Ansatzpunkt? Die Wrapper-Funktionen sind völlig eigenständig und portabel (verdammt, sie funktionieren sogar auf einem Nintendo DS), aber die OO-Schicht hängt von vielen benutzerdefinierten Klassen ab, die schwer zu Ihrem eigenen Projekt hinzuzufügen sein könnten.

2voto

Gavin Maclean Punkte 191

GZStream ist einen Blick wert. Dies ist ein schöner plattformübergreifender Wrapper um ZLib, der die STL iostream-Klassen erweitert.

http://www.cs.unc.edu/Research/compgeom/gzstream/

Der Vorteil dieses Wrappers gegenüber anderen ist, dass man bei sehr großen Archiven nicht den gesamten Datensatz in den Speicher laden muss.

0 Stimmen

Hey, der sieht gut aus! 7 Jahre alt... Ich werde versuchen, es zu kompilieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X