今すぐ修復
- ファイルをドロップ
- 修復はローカルで実行
- 結果をダウンロード
WinRAR、7-Zip、そしてコマンドラインの unzip は、いずれも「Unexpected end of archive」の何らかの変種を、同じ根本的な理由で出します。ファイルを読むときに、実際にあるより多くのバイトを期待するのです。ダウンロードが途中で止まった、USB メモリからのコピーが早く中断された、あるいはクラウド同期が半分で停止した。上にアーカイブをドロップすると、ツールはブラウザ内でその本当の構造を検査します — 切り詰め地点より前に完全に書き込まれたエントリを見つけ出し、末尾が欠けているからといってファイル全体を拒否するのではなく、それらを取り出します。
ファイル形式のレベルでエラーが意味すること
ZIP ファイルは一続きの塊ではありません — ローカルファイルエントリの連なりに、いちばん最後に セントラルディレクトリ(central directory)が続く構造です。各エントリは PK\x03\x04 というシグネチャで始まり、自身の名前・圧縮方式・サイズを持ち、その後に deflate 圧縮されたデータが来ます。最後のエントリの後にセントラルディレクトリ(PK\x01\x02 レコード)が来て、ファイルは End Of Central Directory レコード、PK\x05\x06 で終わります。この EOCD こそが索引です。展開ソフトに、ファイルがいくつあり、それぞれがどこから始まるのかを教えます。
ここに落とし穴があります。索引はファイルのいちばん最後にあります。ダウンロードやコピーが途中で切れると、末尾こそがまさに失われる部分です — だから展開ソフトは EOCD があるはずの場所へシークし、PK\x05\x06 シグネチャの代わりにデータ(か、何もない状態)を見つけ、「Unexpected end of archive」と報告するのです。アーカイブがぐちゃぐちゃになっているのではありません。単に目次が欠けているだけで、おそらく最後の一つか二つのファイルも欠けているのです。
RAR と 7z も、同じ理由で同じように失敗します。RAR はブロックヘッダーを保持し、末尾にアーカイブ終端マーカーを置きます。.7z はヘッダーのデータベースをファイルの末尾に保持し、たいてい多くのファイルをひとつの ソリッド(solid) ストリームにまとめて圧縮します。どの場合でも、ツールが最初に必要とするメタデータこそが、切り詰めが最初に破壊するメタデータなのです。
それでも取り出せるもの、そして救出の仕組み
各 ZIP エントリは自分自身を記述しているので、セントラルディレクトリ全体は展開にとっては冗長です — それは索引であって、データではありません。ツールは欠けた EOCD を無視し、代わりにファイルの先頭から前方へ走査します。見つかる限りの PK\x03\x04 ローカルヘッダーを捕まえ、バイトが尽きるまで後続の deflate ストリームを展開します。切れ目より前に完全に書き込まれたファイルはどれも無傷で戻ってきます。切り詰め地点にまたがった一つのファイルだけは、一部だけ戻るか、まったく戻らないかもしれません。これはあなたのタブ内で純粋な TypeScript として実行されます — アーカイブユーティリティのインストールは不要で、どこにも何も送りません。
RAR と 7z はより制約が大きいものの、望みがないわけではありません。RAR では、切り詰めより前に格納されたファイルは依然としてデコードでき、リカバリレコード(recovery record)付きで作成された RAR は格段によく修復されます。そのレコードが欠けたブロックを再構築するために設計されているからです。.7z は脆い場合です。リカバリレコードがなく、ファイル同士を連鎖させるソリッド圧縮では、末尾を失うと最後の完全なブロック以降のすべての展開が壊れかねません。ツールは生き残ったブロックが許す範囲を救い出し、ソリッドストリームが継続できないときは正直にそう伝えます。
正直な限界:切れ目より後のバイトは失われている
ファイルに一度も存在しなかったデータを復元できるソフトウェアはありません。ダウンロードが 60% で止まったなら、圧縮データの最後の 40% はあなたのディスク上に存在せず、何をもってしても — このツールでも、WinRAR 自身の修復機能でも、有料の復元スイートでも — それを生み出し直すことはできません。それに対する解決策は、完全なバイトを手に入れるために、アーカイブを元の場所から再ダウンロードするか再コピーすることです。
私たちが確実にできるのは、途中まで届いたアーカイブを全損にしないことです。十個中九個のファイルが接続の切れる前に届いたのなら、十個目を追いかけて九個を失う理由はありません。そして操作のすべてがブラウザ内で起きるので、財務記録・ソースコード・個人的な文書を含むかもしれないアーカイブが、中を覗くためだけに見知らぬサーバーへコピーされることは決してありません — ネットワーク(Network)タブを見て、一バイトも出ていかないことを自分で確認できます。
修復できるものとできないもの
修復できる
- 切り詰められたダウンロードでセントラルディレクトリ/EOCD を失った ZIP — 切れ目より前のエントリはローカルヘッダーを走査して取り出します
- 接続が切れる前に完全に書き込まれた、部分的にダウンロードされた ZIP 内の個々のファイル
- 切り詰め地点より前に格納されたファイルが依然としてデコードできる RAR アーカイブ
- リカバリレコードを備えた RAR アーカイブ(これらは格段によく修復されます)
- 生き残った最後の完全な圧縮ブロックまでの 7z アーカイブ
修復できない
- 圧縮データが切り詰め地点より後に位置していたファイルはすべて — それらのバイトはあなたのディスク上にありません
- 無傷の最後のブロックを越えた 7z のソリッドストリーム(連鎖のそれ以降のファイルは展開できません)
- さらに暗号化/パスワード保護されていて、パスワードが提供されないアーカイブ
- 短すぎて最初のエントリの断片しか届かなかったダウンロード
修復が失敗した場合、その理由(データの欠落か構造の破損か)をお伝えします。失敗した修復に料金が請求されることはありません。