Ich habe ein paar libs (LiteZip und ZipArchive) gefunden, mit denen Sie Dateien auf dem iPhone entpacken können. Aber beide erfordern eine Eingabe als Datei. Gibt es eine Bibliothek, die es ermöglicht, NSData, die zip-archivierte Daten enthalten, direkt zu entpacken, ohne sie in eine temporäre Datei zu schreiben?
Ich habe versucht, oben genannten Bibliotheken für das übernehmen, aber bisher ohne Erfolg.Entpacken NSData ohne temporäre Datei
Antwort
Von dem, was ich verstehe, speichert das Zip-Format Dateien getrennt und jede gespeicherte Datei wird mit einem Komprimierungsalgorithmus komprimiert (in der Regel ist es der DEFLATE-Algorithmus).
Wenn Sie daran interessiert sind nur in Dekomprimieren Daten sind, die den DEFLATE Algorithmus komprimiert wurde konnte man diese zlib addition to NSData verwenden von Google Toolbox For Mac
Dabei spielt es keine temporären Dateien benötigen.
Da Dateien in zip-Archiven einzeln komprimiert gespeichert werden, Und in ihrer ursprünglichen Ordnerhierarchie sollte es möglich sein, ein NSData-Objekt durch einfaches Übergeben eines Pfades (relativ zum Stamm des Zip-Archivs) zu extrahieren, oder? – avocade
In this answer bis this question, ich darauf hinweisen, die CocoaDev Wiki category on NSData, die Zip/Unzip-Unterstützung zu dieser Klasse hinzugefügt. Dadurch können Sie dies vollständig im Speicher tun.
Diese Kategorie fügt die Unterstützung von gzip/zlib hinzu, nicht das eigentliche Zip-Format (das übrigens nicht in ein einzelnes NSData-Objekt dekomprimiert werden konnte, das die Struktur von Dateien/Verzeichnissen nicht darstellen kann). –
Warum möchten Sie keine temporäre Datei verwenden? In welcher Form möchten Sie die unkomprimierten Daten? Sind es tatsächlich komprimierte Daten, die Sie in Ihren NSData haben? –
Ich habe eine verschlüsselte Zip-Datei. Ich entschlüssele es im Speicher zu NSData und möchte es dann direkt entpacken. – Vladimir
Ich habe einmal genau das geschrieben was du brauchst (mit Ausnahme der Verschlüsselungsunterstützung). Es war ziemlich einfach und in wenigen Stunden realisiert. Leider habe ich keinen Zugriff mehr auf den Code. Warum schreibst du nicht einen von Grund auf (mit der Verwendung von zlib)? Die ZIP-Datei ist ein ziemlich einfaches Dateiformat. – Codo