2016-08-03 18 views
-3

Ich habe eine Zip-Klasse geschrieben, die Funktionen und Code von Miniz verwendet: Öffnen Sie ein Archiv, Schließen Sie ein Archiv, Öffnen Sie eine Datei im Archiv, Schließen Sie eine Datei im Archiv, und schreiben zur aktuell geöffneten Datei im Archiv.Anhängen an eine Datei in einem Zip-Archiv

Beim Öffnen einer Datei in einem Archiv wird diese Datei überschrieben, wenn sie bereits existiert. Ich würde gerne wissen, ob es möglich ist, an eine Datei in einem Zip-Archiv, das bereits geschlossen wurde, anzuhängen?

Ich möchte sagen, dass es möglich ist, aber ich würde alle Offsets in jeder der anderen Datei internen Zuständen und im zentralen Verzeichnis bearbeiten müssen. Wenn es möglich ist - ist das der richtige Weg, um hineinzuschauen?

Hinweis: Ich beschäftige mich mit großen Dateien, so Dekomprimierung und Komprimierung ist nicht ideal und macht auch keine Kopie von Dateien. Ich möchte nur eine Datei im Zip-Archiv "öffnen", um mit dem Schreiben von komprimierten Daten fortzufahren.

+0

Da in einer Zip-Datei etwas an die Daten angehängt wird und das Zippen dann nicht dazu führt, etwas an die Datei anzuhängen, sondern es stattdessen in mehreren Ebenen zu ändern, ist das unmöglich. Das Zippen ist aufgrund von Korrelationen zwischen verschiedenen Datenelementen möglich, ist also in Bezug auf ein bestimmtes Datenelement nicht lokal. –

Antwort

1

Ich möchte nur eine Datei im Zip-Archiv "öffnen", um weiterhin komprimierte Daten zu schreiben.

Komprimierte Dateien funktionieren nicht wie ein Dateisystem oder Ordner, wo Sie einzelne Dateien ändern können. Sie halten z.B. Prüfsummen, die für das gesamte Archiv gelten müssen.

Also nein, Sie können nicht so inplace, aber müssen Sie die komprimierte Datei entpacken, Ihre Änderungen anwenden und alles wieder komprimieren.

+0

Wenn ich die Dateistatistiken aus dem Archiv abrufen könnte, z. B. den lokalen Verzeichniskopf, Offset in das Archiv usw., könnte ich nicht einfach diese Informationen bearbeiten und komprimierte Daten schreiben, als würde ich eine neue Datei in das Archiv schreiben ? –

+0

@WillM Nun, wenn Ihre Komprimierungsbibliothek API eine solche Funktion bietet, gehen Sie weiter. –