抽出できない大きな (重要な) ファイルを含む Zip アーカイブがあります。壊れた Zip アーカイブを回復/修正すると主張するものを含め、私が試したすべての Zip ユーティリティは、破損した zlib 圧縮データを含むファイルを抽出できません。スキップされる破損したエントリを除いて、アーカイブ内のすべてのファイルを取得します。
Zip アーカイブを解析し、各エントリを識別してフィールドを解析し、データ セクションを復号化し、(zlib の .Net 実装から) DeflateStream を使用してそれらを解凍する小さなユーティリティ アプリを C# で作成しました。破損したエントリに到達するまで、すべてが正常に機能します。破損したエントリは (CTR モードで AES を使用して) 正常かつ完全に復号化されますが、DeflateStream リーダーは、「Bad state (oversubscribed dynamic bit lengths tree)」をスローする前に、復号化されたデータに約 40MB しか到達できません。
どうにかして破損したセクションを「シーク」し、データの解凍を続けることは可能ですか? いくつかの穴があっても、できるだけ多くのファイルを回復したいと考えています。DeflateStream は Seek メソッドを実装していません。基になる FileStream を最後の読み取り位置に配置して新しい DeflateStream を作成しようとすると、同じ「Bad State」例外がスローされます。