2010-08-16 10 views
7

Ich habe Chilkat Zip. Net bereits verwendet, um Backup-Dateien aus meiner Anwendung zu generieren, aber nach Problemen mit der Komponente für dieselbe Funktion zu Xceed Zip .Net verschoben.Korrigieren von beschädigten ZIP-Datei-Headern

Wenn Sie eine der Zips mit dem Chilkat erzeugt und versuchen, mit Xceed, 7Zip, WinZip zu extrahieren, dann schlägt es fehl.

Wenn Sie die gleiche Datei nehmen und extrahieren mit Chilkat, Windows Zip, WinRar dann extrahiert die Datei einfach gut.

Nachdem ich Wikipedia über das WinZip-Format gelesen hatte, habe ich den zentralen Verzeichnis- und den lokalen Datei-Header untersucht, und es scheint, dass die Chilkat-Komponente den Datensatz des zentralen Verzeichnisses falsch geschrieben hat. Wenn Sie etwas wie FRHed verwenden, um den zentralen Datensatz zu bearbeiten und die Dateigröße gleich der Größe des lokalen Headers zu machen, wird alles korrekt extrahiert.

Was würden Sie mir empfehlen?

  1. Schreiben Sie ein kleines Programm, um die Chilkat Bibliothek mit dem Zip extrahieren und dann mit der Xceed Bibliothek
  2. Lesen Sie die Zip-Datei für den notwendigen Zip-Marker (wie definiert in der Spec) und dann die Zentral korrigieren suchen recompress Header.
  3. Eine andere Kombination.

Antwort

2

Es hängt von der Anzahl der Sicherungen, die Ihr Programm generiert. Wahrscheinlich wäre es einfacher, sie aus dem Programm oder von Hand zu dekomprimieren/neu zu komprimieren. Wenn es jedoch viele Dateien gibt, wäre der bessere Weg, zentrale Verzeichnis-Datensatzfelder zu fixieren - Sie sollten Code schreiben, der 1) nach dem zentralen Verzeichnis sucht; 2) geht für jeden Datensatz an die Position, an der der lokale Dateikopf gespeichert ist, und liest die Dateigröße; 3) gehe zurück zum zentralen Verzeichnis und schreibe dort eine gültige Dateigröße; 4) Vorsicht vor großen Dateien, wenn sie sind - Dateigröße für Dateien> 4Gb ist in Erweiterung geschrieben.

+0

Danke. Was ich getan habe, ist, was Sie geschrieben haben, ich habe nur die alten Backup-Dateien dekomprimiert und dann wieder komprimiert, ABER nur, wenn die Datei selbst den Fehler im Datensatz aufwies. Ich habe eine kleine Anwendung, die als Support-Modul zu unserer Anwendung geliefert wird, gemacht, so dass die alte Bibliothek für den Gebrauch da war. –

Verwandte Themen