"Unexpected end of archive"

6 つのツール、6 つの異なる言い回し、その根っこにある事実は 1 つ — アーカイブが、自身の構造が示すべき長さより短いのです。このページはツールごとにその文言を読み解き、ZIP、RAR、7z、tar でどの終端マーカーが消えるのかを正確に示し、そして正しい復旧の道筋へと導きます — すべて、ファイルをサーバーに渡すことなく。

ファイルがデバイスから出ることはありません — 修復はブラウザ内で実行されます。アップロードは 0 バイトです。

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

ここにファイルをドロップするか、参照してくださいタップしてファイルを選択

ZIP · Office · PDF · 動画 · JPG · PNG · RAR/7z · SQLite — ブラウザ内でそのまま修復します。何もアップロードされません

アップロード済み 0 バイト無料: 1 日 3 回の修復 — 動画は最大 500 MB、ドキュメントとアーカイブは 100 MB、写真は 50 MB。ダウンロード無料。1 回の修復は €5.90。アカウント不要。

今すぐ修復

  1. ファイルをドロップ
  2. 修復はローカルで実行
  3. 結果をダウンロード

これは 1 つのエラーメッセージが、いくつもの衣装をまとっているだけです。WinRAR は "Unexpected end of archive" と言い、7-Zip はたいてい "Unexpected end of data" と言い、コマンドラインの unzip は "cannot find zipfile directory" とこぼし、macOS は謎めいた "Error 2" を投げ、tar は "Unexpected EOF in archive" と報告します。どれも同じことを言っています — ツールは既知の位置に構造マーカーがあると期待してファイルを読み、その代わりにバイトの終端に突き当たったのです。上にアーカイブをドロップすると、IntactFile はブラウザ内でその実際のレイアウトを調べ、ファイルが尽きる前に完全に書き込まれたエントリを見つけ出し、末尾が欠けているというだけで全体を拒否するのではなく、それらを抽出します。

正確な文言を、ツールごとに

あなたが目にするメッセージは、どのツールとどの形式を相手にしているかを強く示すヒントです — 何かに手を付ける前に読み解く価値があります。それぞれが少しずつ違う地点で失敗するからです。

  • WinRAR — "Unexpected end of archive." 定番です。WinRAR は、ブロックヘッダーやアーカイブ終端マーカーがまだ「この先があるはず」と示しているのに、ファイルの終端に達しました。.rar にも、WinRAR が開く ZIP にも当てはまります。
  • 7-Zip — "Unexpected end of data"(ときに "Unexpected end of archive")。 7-Zip は、きれいな切り詰め(「end of data」)を、誤ったシグネチャ(「is not archive」)や、反転したバイト(「Data error」)と区別します。「End of data」は具体的に、ストリームが途中で止まったこと — かき混ぜられたのではなく、切り詰められたこと — を意味します。
  • Info-ZIP unzip — "cannot find zipfile directory … End-of-central-directory signature not found." unzip は末尾から後ろ向きに PK\x05\x06 を探しますが見つからず、そのためファイル一覧すら構築できません。データ自体は無事かもしれませんが、索引が失われているのです。
  • Windows エクスプローラー — "The compressed (zipped) folder is invalid." 内蔵の展開機能は、この中で最も具体性に欠けます。たいていは同じ EOCD 欠落の話です — その正確な文言については "Compressed folder is invalid" をご覧ください。
  • macOS のアーカイブユーティリティ — "Error 2 – No such file or directory." 有名なほど不透明です。見つけられない「ファイル」とは、末尾にあると期待していた中央ディレクトリレコードのことです。同じ切り詰めですが、とりわけ役に立たないメッセージです。
  • Python zipfileBadZipFile: File is not a zip file、あるいは .read() でのエラー。 EOCD が欠けていると、zipfile はそもそも開くことを拒みます。後方のエントリだけが切り詰められている場合は問題なく開き、そのメンバーを読むときにだけ失敗します。
  • GNU tar / gzip — "Unexpected EOF in archive" / "unexpected end of file." まったく別の構造(中央索引がそもそも存在しない)です — 後述します。

あなたの文言がこのリストにあるなら、ほぼ間違いなく手元にあるのは短いファイルであって、かき混ぜられたものではありません — そして復旧は、どのツールが報告したかにかかわらず同じです。

「終端」がどこにあるのか、形式ごとに

どのアーカイブ形式も、「アーカイブは完全で、その内容はここに索引されている」と告げる小さな重要構造を保持しています。その構造はファイルの末尾、あるいはその近くに存在します — まさに切り詰めが真っ先に破壊する領域です。どのマーカーが欠けているかを知れば、どれだけ救出できるかがわかります。

  • ZIP — End Of Central Directory(PK\x05\x06)。 ZIP は、ローカルエントリの連なり(それぞれ PK\x03\x04 で始まる)、次に PK\x01\x02 レコードの中央ディレクトリ、そして最後に 22 バイトの EOCD です。EOCD が索引です。大きな、あるいは 4 GB を超えるアーカイブは、その直前に ZIP64 の EOCD レコード(PK\x06\x06)とロケーター(PK\x06\x07)を加えます。末尾を失えば索引を失います — しかし、自己記述的なローカルエントリは失いません。
  • RAR 4 — アーカイブ終端ブロック(HEAD_TYPE 0x7B)。 Rar!\x1A\x07\x00 シグネチャの後、RAR4 は独立して復号できるブロックを格納し、終端ブロックで締めくくります。切断より前のファイルはなお復号できます。リカバリレコード付きで作成された RAR なら、欠けたブロックをまるごと再構築できます。
  • RAR 5 — アーカイブ終端ヘッダー(ヘッダータイプ 5)。 シグネチャは Rar!\x1A\x07\x01\x00、再設計されたヘッダー形式ですが、考え方は同じ — 切り詰めが取り除いてしまう専用の終端ヘッダーです。
  • 7z — Start Header が末尾の End Header を指す。 37 7A BC AF 27 1C シグネチャと 2 バイトのバージョンの後には、NextHeaderOffsetNextHeaderSize、CRC を保持する 20 バイトの Start Header があります — ファイルの一番最後にあるヘッダーデータベースへのポインターです。ファイルを切り詰めると、そのポインターは最後のバイトより先を指します。さらに悪いことに、.7z は既定でソリッド圧縮を使い、ファイルを 1 本のストリームに連結するため、末尾を失うと最後の完全なブロック以降のすべてのファイルが壊れかねません。

パターンは普遍的です。展開器が最初に必要とするメタデータが最後に格納されるので、切り詰めが真っ先に殺すのがそのメタデータなのです。だからこそ "unexpected end" はこれほど頻発し、だからこそデータ自体はたいていまだ復旧できるのです。

.tar と .tar.gz: 失うべき索引がない、別種の EOF

tar は例外で、診断が異なるため独自の説明に値します。.tar には中央索引がまったくありません。それは 512 バイトレコードの素朴な並びです — ファイルごとに 1 つのヘッダーブロック(名前、サイズ、チェックサムを持つ ustar ヘッダー)、続いて次の 512 バイト境界まで詰められたファイルのデータ。アーカイブは連続する 2 つのすべてゼロの 512 バイトブロックによって終了が宣言されます。末尾のゼロブロックが届かなかった場合、完全に書き込まれた各ファイルが完璧に抽出できるにもかかわらず、tar は "Unexpected EOF in archive" と表示します — tar はレコードを先頭から末尾へたどるだけなので、尽きたバイトまでのすべてを復元します。

.tar.gz(または .tgz)は、その tar ストリームを gzip で包みます。gzip メンバーは 10 バイトのヘッダー(1F 8B 08 …)、deflate ストリーム、そして非圧縮データの CRC-32 と ISIZE(元のサイズを 2³² で割った余り)を保持する 8 バイトのトレーラーです。切り詰めると gzip は "unexpected end of file" と報告します — 切断点までは正しく解凍し、その後は照合すべきトレーラーがないのです。救出は ZIP と同じ原理です。無傷なバイトが許す限り前方へ復号します。

切り詰め、中断、それともビット腐敗? 次に行くべき場所

"Unexpected end" は症状です。原因があなたの最善手を決め、それには 3 つあります。

  • 止まった、あるいはキャンセルされたブラウザのダウンロード。 アーカイブがリンク経由で、転送が最後まで終わらなかった場合(居残った .crdownload/.part、"Failed – Network error")、正確にどのバイトが生き残るかの仕組みは固有のものです — 中断された ZIP のダウンロードをご覧ください。
  • 完全に見えて実はそうでないクラウドのファイル。 Drive、Dropbox、OneDrive は、.zip にリネームされた HTML のエラーページや、部分的な同期を渡してくることがあります — 破損になりすます切り詰めです。短いファイルを本物のビット腐敗と見分けるには、壊れたクラウドのアーカイブを診断する方法をご覧ください。
  • 元のファイル自体が短い。 元のファイルが本当に末尾を欠いているなら、どんなツールも欠けたバイトをでっち上げられません — それでも IntactFile は切断より前に書き込まれたすべてを抽出します。上にドロップして、無傷のエントリを救出してください。

どの場合でも、救出そのものは同一で、すべてあなたのタブ内で動きます。IntactFile は欠けた終端マーカーを無視し、ファイルの先頭から前方へ走査して各無傷エントリを捕まえ、生き残ったバイトが許す分を解凍します — 純粋な TypeScript で、アーカイブユーティリティのインストールは不要、そしてネットワーク(Network)タブを開けば、非公開のアーカイブのバイトが 1 つもあなたのマシンから出ていかないことを確認できます。

修復できるものとできないもの

修復できる

  • 切り詰められたダウンロードで EOCD(PK\x05\x06)を失った ZIP — 無傷のローカルエントリは前方走査で復元されます
  • PK\x06\x06 / PK\x06\x07 の末尾が欠けているが、エントリは生き残っている ZIP64 アーカイブ
  • 切り詰めより前に格納されたブロックがまだ復号できる RAR アーカイブ(リカバリレコード付きの RAR が最もよく修復されます)
  • 切断より前の、最後の完全なソリッド圧縮ブロックまでの 7z アーカイブ
  • 末尾のゼロブロックを欠く .tar、あるいは gzip トレーラーより前で切り詰められた .tar.gz — 切断より前に書き込まれたすべてが抽出されます

修復できない

  • 切り詰め点より後に置かれていた圧縮データを持つファイル — それらのバイトはあなたのディスクにありません
  • 最後の無傷ブロックより先の 7z ソリッドストリーム(連鎖の後方のファイルは解凍できません)
  • パスワードが提供されていない、暗号化された / パスワード保護されたアーカイブ
  • 最初のエントリの断片しか届かなかった、あまりに短いダウンロード

修復が失敗した場合、その理由(データの欠落か構造の破損か)をお伝えします。失敗した修復に料金が請求されることはありません。

よくある質問

なぜ WinRAR と 7-Zip は、同じファイルに対してこのエラーを違う文言で表示するのですか?

それぞれのツールは、自分があきらめた地点を報告します。WinRAR はアーカイブ終端ブロックを期待して "Unexpected end of archive" と言い、7-Zip はきれいな切断("Unexpected end of data")を、誤ったシグネチャや反転したバイト("Data error")と区別し、unzip は End-Of-Central-Directory レコードすら見つけられません。文言は違えど、欠けている末尾は同じです。

macOS は "Error 2 – No such file or directory." としか言いません。何が欠けているのですか?

アーカイブユーティリティが見つけられない「ファイル」とは、アーカイブの末尾にあるはずの ZIP の中央ディレクトリレコードのことです。他のあらゆるツールが報告するのと同じ切り詰めで、macOS はそれを、とりわけ役に立たないメッセージで表に出しているだけです。

終端に達しなかった .tar は復旧できますか?

たいていは、はい。tar には索引がありません — 2 つのゼロブロックで終わる、先頭から末尾へ並んだ 512 バイトレコードの連なりです。その末尾のブロックが欠けていると、tar は文句を言いますが、切断より前に書き込まれた各ファイルはきれいに抽出されます。tar はレコードを順番に読むからです。

アーカイブは機密です。チェックのためにアップロードされますか?

いいえ。アーカイブはあなたのディスクから読み取られ、ブラウザのタブ内で処理されます。何も送信されません。ネットワーク(Network)タブを開いて、ファイルのバイトが 0 バイトしかあなたのマシンから出ていかないことを確認してください — アーカイブに、見知らぬ相手のサーバーへは複製したくない書類が入っているときに役立ちます。

関連: ZIP アーカイブを修復する · "Compressed folder is invalid" · クラウドのファイルにおける切り詰めとビット腐敗