ZIP aus einem abgebrochenen Download

Ein Download, der zu früh abbricht, verwürfelt ein ZIP nicht — er kürzt es ab. Der Index am Ende der Datei (das zentrale Verzeichnis) kam nie an, deshalb verweigern Entpacker das gesamte Archiv, obwohl die vorher gespeicherten Dateien noch da sind. Diese Dateien zurückzubekommen ist eine Frage des Lesens von vorn — und dazu muss man das Archiv keinem Server übergeben.

Deine Datei verlässt nie dein Gerät — die Reparatur läuft in deinem Browser. 0 Bytes hochgeladen.

Your data is the big block — usually intact. What breaks is the small index. Repair rebuilds it.

Drop a file here or browseTap to choose a file

ZIP · Office · PDF · video · JPG · PNG · RAR/7z · SQLite — repaired right here in your browser. Nothing is uploaded

0 bytes uploadedFree: 3 repairs/day — up to 500 MB video, 100 MB docs & archives, 50 MB photos. Free download. Single repair €5.90. No account required.

Jetzt reparieren

  1. Datei ablegen
  2. Reparatur läuft lokal
  3. Ergebnis herunterladen

Wenn ein Browser-Download, ein "Alle herunterladen" aus der Cloud oder eine Kopie über eine instabile Verbindung vor dem letzten Byte stoppt, ist die .zip, die auf deiner Festplatte landet, abgeschnitten — kürzer, als der Server sie je gemeint hat. WinRAR und 7-Zip melden "Unexpected end of archive" (unerwartetes Archivende), das unzip von Info-ZIP meldet "End-of-central-directory signature not found" (Signatur des zentralen Verzeichnisendes nicht gefunden), der Windows-Explorer meldet "The Compressed (zipped) Folder is invalid" (der komprimierte Ordner ist ungültig), und Pythons zipfile wirft BadZipFile: File is not a zip file. Alle reagieren auf dasselbe: Der Index der Datei, der ganz am Ende liegt, fehlt. Lege das unvollständige Archiv oben ab, und das Werkzeug ignoriert den fehlenden Index und durchläuft die Einträge von oben im Browser — dabei wird jede Datei extrahiert, die vor dem Abschnitt vollständig geschrieben wurde. Nichts wird hochgeladen.

Warum ein abgebrochener Download ein ZIP unbrauchbar macht

Ein ZIP wird von vorn nach hinten geschrieben, aber von hinten nach vorn gelesen. Jede Datei, die du hinzugefügt hast, wird als lokaler Dateieintrag gespeichert — ein Header, der mit der Signatur PK\x03\x04 beginnt und den Namen, die Kompressionsmethode (0 = gespeichert, 8 = Deflate) und dann die komprimierten Bytes trägt —, doch der maßgebliche Index dafür, wo diese Einträge liegen, ist das zentrale Verzeichnis (PK\x01\x02-Datensätze), das zuletzt geschrieben wird, unmittelbar vor dem 22 Byte großen End Of Central Directory-Datensatz, PK\x05\x06. Ein Entpacker öffnet die Datei, indem er ans Ende springt und rückwärts nach dieser PK\x05\x06-Signatur sucht — bis zu rund 65 557 Bytes zurück, weil der Datensatz mit einem Kommentarfeld variabler Länge endet. Erst wenn er den EOCD gefunden hat, weiß er, wie viele Einträge das Archiv enthält und wo jeder Datensatz des zentralen Verzeichnisses beginnt.

Stell dir nun den Download vor, der bei 70 % stehen blieb. Die Bytes, die nie ankamen, sind die zuletzt geschriebenen: das zentrale Verzeichnis und der EOCD. Der Entpacker springt ans Ende, sucht rückwärts, sieht nie PK\x05\x06 und gibt auf, bevor er eine einzige Datei anrührt. Genau das ist die Ursache für das "End-of-central-directory signature not found" von unzip, das "Unexpected end of archive" von 7-Zip und WinRAR, das "The Compressed (zipped) Folder is invalid" des Explorers und das "Unable to expand … (Error 2)" des macOS-Archivierungsprogramms. Keine dieser Meldungen bedeutet, dass die gespeicherten Dateien durcheinandergeraten sind — sie bedeuten, dass das Inhaltsverzeichnis am Ende verschwunden ist.

Abgebrochene Downloads sind dafür besonders anfällig, weil so viele ZIPs erzeugt werden. Ein Archiv, das ein Server spontan zusammensetzt — ein "Alle herunterladen" aus einem Cloud-Speicher, das ZIP-Pendant eines GitHub-Quelltext-Tarballs, ein Export-Paket —, wird meist per Streaming ausgeliefert: Bit 3 der Allzweck-Bitflag (0x0008) ist gesetzt, die komprimierte Größe und die CRC-32 in jedem lokalen Header werden auf null gelassen, und die echten Werte werden nach den Daten des Eintrags in einem Data Descriptor (PK\x07\x08) angehängt. Für solche Archive ist das zentrale Verzeichnis der einzige Ort, an dem die Größen garantiert sind, sodass der Verlust des Endes einen normalen Entpacker doppelt trifft. Die halb geschriebene Datei, die dein Browser hinterlassen hat — eine .crdownload von Chrome/Edge, eine .part von Firefox oder eine .zip, die schlicht kürzer ist als das Content-Length der Antwort —, enthält immer noch jeden vollständigen Eintrag bis zum Abschnitt und nichts danach.

Was der Vorwärtsdurchlauf aus einem unvollständigen ZIP rettet

Die Rettung braucht den fehlenden Index überhaupt nicht, denn in einem ZIP beschreibt sich jeder lokale Eintrag selbst. Statt ans Ende zu springen, durchläuft das Werkzeug die Datei vorwärts ab Offset 0, hält an jedem lokalen Header PK\x03\x04 an, den es findet, liest den Dateinamen und die Kompressionsmethode und dekomprimiert dann den nachfolgenden Deflate-Stream. Deflate terminiert sich selbst: Ein Stream ist eine Folge von Blöcken, und der letzte Block trägt ein auf 1 gesetztes BFINAL-Bit, sodass der Decoder erkennen kann, wo die Daten eines Eintrags enden — selbst wenn das Größenfeld im lokalen Header von einem Streaming-Writer auf null gelassen wurde. Wenn der Stream sauber endet, verzeichnet das Werkzeug eine wiederhergestellte Datei, überspringt einen etwaigen nachfolgenden Data Descriptor PK\x07\x08 und fährt beim nächsten PK\x03\x04 fort. Das läuft als reines TypeScript in deinem Tab — kein unzip-Binary, nichts wird übertragen.

Das Ergebnis: Jede vor der Unterbrechung vollständig geschriebene Datei kommt zurück, in der richtigen Reihenfolge, mit ihrem ursprünglichen Namen und Verzeichnispfad. Ist der Download mitten in der vierten von zehn Dateien gestorben, erhältst du die ersten drei intakt und eine vierte, die unvollständig oder verworfen ist; die sechs, die nie ankamen, lassen sich nicht herbeizaubern, aber darum ging es ohnehin nie. Ein "gespeicherter" Eintrag (Methode 0, keine Kompression — üblich für bereits komprimierte Inhalte wie JPEGs oder MP4s, die ins ZIP gelegt werden) lässt sich noch einfacher retten: Seine Bytes werden bis zum Abschneidepunkt unverändert kopiert, sodass selbst eine nur zur Hälfte angekommene große Datei häufig ein brauchbares Anfangsfragment liefert statt gar nichts.

Die ehrliche Grenze: Das fehlende Ende ist weg

Kein Werkzeug kann Bytes zurückgeben, die deine Festplatte nie erreicht haben. Ist die Verbindung bei 70 % abgerissen, existieren die letzten 30 % der komprimierten Daten lokal nicht, und nichts — weder diese Seite noch die "Repair"-Funktion von WinRAR noch eine kostenpflichtige Recovery-Suite — kann sie rekonstruieren. Die einzige echte Lösung für das fehlende Ende ist, das Archiv erneut herunterzuladen — von der Quelle, idealerweise mit einem Client, der HTTP-Range-Requests unterstützt, damit eine unterbrochene Übertragung dort fortsetzt, wo sie stehen blieb, statt neu zu beginnen. Hat der Server ein ETag oder ein Content-Length gesendet, zeigt dir der Vergleich dieser Länge mit der Größe deiner unvollständigen Datei genau, wie viel wirklich fehlt.

Ein paar ehrliche Grenzfälle. Ein verschlüsseltes ZIP (ein beim Packen gesetztes Passwort, Bit 0 der Allzweck-Bitflag) lässt sich ohne das Passwort nicht durchlaufen, weil die Eintragsdaten Chiffretext sind, dem keine Deflate-Struktur folgt. Ein sehr großes Archiv im ZIP64-Format führt eigene abschließende Strukturen — den ZIP64-EOCD-Datensatz (PK\x06\x06) und seinen Locator (PK\x06\x07) —, die mit dem Ende genauso verloren gehen wie der klassische EOCD, doch der Vorwärtsdurchlauf stellt die lokalen Einträge unabhängig vom Format weiterhin wieder her. Und ein Download, der so kurz ist, dass nur ein Fragment des allerersten lokalen Headers ankam, bietet nichts zum Durchlaufen. Alles zwischen diesen Extremen ist erreichbar.

Weil der gesamte Vorgang in deinem Browser abläuft, wird das Archiv nie auf einen Server kopiert, nur um hineinzuschauen — was zählt, wenn ein "Alle herunterladen"-Paket Steuerdokumente, exportierte Chatverläufe oder privaten Quelltext enthält. Du kannst den Netzwerk-Tab öffnen, die Wiederherstellung ausführen und bestätigen, dass 0 Bytes der Datei jemals deinen Rechner verlassen.

Was sich reparieren lässt und was nicht

Kann repariert werden

  • Ein ZIP, dessen Download unterbrochen wurde und dabei das zentrale Verzeichnis und den EOCD verlor — vor dem Abschnitt geschriebene Einträge werden durch Durchlaufen der lokalen Header von oben wiederhergestellt
  • Per Streaming ausgelieferte / servergenerierte ZIPs (Bitflag-Bit 3 gesetzt, Größen in einem Data Descriptor PK\x07\x08), deren Deflate-Streams sich am BFINAL-Bit selbst terminieren
  • Teil-Download-Dateien des Browsers (.crdownload von Chrome/Edge, .part von Firefox), die die bislang vollständig empfangenen Einträge enthalten
  • Als "gespeichert" (unkomprimiert) abgelegte Einträge, die bis zum Abschneidepunkt unverändert kopiert werden, einschließlich eines brauchbaren Anfangsfragments der Datei, die über den Abschnitt hinausragte
  • ZIP64-Archive, deren abschließende EOCD-Strukturen verloren gingen, deren lokale Einträge aber überleben

Kann nicht repariert werden

  • Jeder Eintrag, dessen komprimierte Daten nach dem Abschneidepunkt lagen — diese Bytes sind nicht auf deiner Festplatte
  • Die einzelne Datei, die über den Abschnitt hinausragte und unvollständig oder gar nicht zurückkommen kann
  • Verschlüsselte / passwortgeschützte ZIPs, wenn das Passwort nicht angegeben wird (die Eintragsdaten sind Chiffretext)
  • Ein Download, der so kurz ist, dass nur ein Fragment des ersten lokalen Headers ankam
  • Die exakte CRC-32 und die Originalgrößen für Einträge, deren Data Descriptor und Datensätze im zentralen Verzeichnis im fehlenden Ende lagen

Wenn eine Reparatur fehlschlägt, sagen wir dir warum (fehlende Daten gegenüber beschädigter Struktur), und für eine fehlgeschlagene Reparatur wird dir nie etwas berechnet.

Häufige Fragen

Warum meldet mein ZIP direkt nach dem Download "unexpected end of archive"?

Weil der Download unterbrochen wurde, bevor die letzten Bytes ankamen. Ein ZIP hält seinen Index — das zentrale Verzeichnis und den End-Of-Central-Directory-Datensatz — am allerletzten Ende der Datei, und genau dieses Ende verliert eine abgebrochene Übertragung. Die früher im Archiv gespeicherten Dateien sind meist intakt; der Entpacker findet nur das Inhaltsverzeichnis nicht, das ihm sagt, dass sie existieren.

Kann ich die Dateien wiederherstellen, ohne alles erneut herunterzuladen?

Oft ja — jede Datei, die vor der Unterbrechung vollständig angekommen ist. Das Werkzeug durchläuft die Datei vorwärts nach jedem lokalen Dateiheader (PK\x03\x04) und dekomprimiert den Eintrag, sodass ein nur teilweise angekommenes Archiv seine vollständigen Dateien dennoch herausgibt. Nicht zurückgeben kann es jede Datei, deren Daten nach dem Abschnitt kamen; für die musst du tatsächlich erneut herunterladen.

Mein Browser hat eine .crdownload- oder .part-Datei hinterlassen. Ist die wiederherstellbar?

Kann sie sein. Eine .crdownload (Chrome/Edge) oder .part (Firefox) sind nur die teilweise heruntergeladenen Bytes unter einem temporären Namen. Lege sie hier so ab, wie sie ist (oder benenne eine Kopie in .zip um), und der Vorwärtsdurchlauf extrahiert alle vollständigen Einträge, die sie enthält. Dateien, die nie heruntergeladen wurden, sind nicht enthalten.

Sollte ich es stattdessen einfach erneut herunterladen?

Wenn du kannst, ja — ein frischer, vollständiger Download ist immer die sauberste Lösung, und ein Client, der HTTP-Range-Requests unterstützt, kann die unterbrochene Übertragung oft fortsetzen, statt von vorn zu beginnen. Die Wiederherstellung ist für den Fall, dass die Quelle weg, langsam oder ratenbegrenzt ist — oder wenn du nur die bereits angekommenen Dateien brauchst statt des ganzen Pakets.

Wird das ZIP bei der Wiederherstellung irgendwohin hochgeladen?

Nein. Das Archiv wird von deiner Festplatte gelesen und in deinem Browser-Tab durchlaufen; der Reader ist reines TypeScript, und nichts wird übertragen. Du kannst den Netzwerk-Tab öffnen und bestätigen, dass 0 Bytes hinausgehen — nützlich, wenn ein "Alle herunterladen"-Paket Dokumente enthält, die du lieber keinem unbekannten Server übergibst.

Verwandt: ZIP-Archiv reparieren · "Unexpected end of archive" (ZIP/RAR/7z) · "Compressed folder is invalid" · Prüfen, dass nichts hochgeladen wird