Ja, es macht es gut. (Wenn Sie jedoch keinen C-Code mögen, sollten Sie sich das 7-zip-SDK ansehen, das Code in C ++ und C # hat.)
unzip.h
zip.h
(siehe contrib \ minizip \ unzip.h und contrib \ minizip \ zip.h )
zum Beispiel dekomprimieren:
Die Funktionen unzOpen()
Ihrer Zip-Datei geben unzFile
Verwenden Sie dann unzGoToFirstFile()
und unzGoToNextFile()
auf diesem unzFile
, um alle Dateien im Archiv zu durchsuchen.
Dann bekommst du die Dateiinfo für jede Datei mit unzGetCurrentFileInfo()
, nämlich für ihre Größe,
sicherlich sollten Sie unzOpenCurrentFile()
in einem Moment aufrufen.
und rufe unzReadCurrentFile()
mit der Größe von fileinfo auf, um den binären Inhalt der archivierten Datei abzurufen.
Optional gibt es eine undurchsichtige Struktur, die Sie verwenden können, um Ihre eigene I / O-Funktion zu verwenden, aber offensichtlich gibt es eine Win32-Standardimplementierung für den Dateizugriff, so dass Sie sich darüber keine Gedanken machen können.
PS: und vergessen Sie nicht, unzCloseCurrentFile ()
aufzurufenVon: Ссылка : 11. Kann zlib ZIP-Archive verwalten?
Nicht alleine, nein. Siehe das Verzeichnis contrib / minizip in der zlib-Distribution.
Es gibt dort kein Tutorial, aber die Quelle zip.c ist genau für IO (also vermutlich für Komprimierung und Dekomprimierung) für ZIP-Dateien, die zlib verwenden.
Und immer noch kein Tutorial, aber Ссылка gibt weitere Details.
Ich habe einen Wrapper um minizip gebaut, indem ich einige Funktionen hinzugefügt habe, die ich brauchte und es netter machte, sie zu benutzen. Is verwendet die neueste C ++ 11 und ist mit Visual Studio 2013 entwickelt (sollte tragbar sein, aber ich habe es nicht auf Unix getestet)
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.