その中に他のzipファイルを含む非常に大きなzipファイルがあります。ファイルが zip ファイルであることを C# プログラムが認識し、zip ファイルの場合は、zip ファイルと同じ場所にあるフォルダーに展開できるようにしたいと考えています。私のコードはここにあります:
private void Unzip(OpenFileDialog tvZipOpen)
{
string zipFile = tvZipOpen.FileName; // file to unzip
int i = zipFile.LastIndexOf(".zip");
string targetDirectory = zipFile.Substring(0, i); // location to extract to
using (ZipArchive zip = ZipFile.OpenRead(zipFile))
{
zip.ExtractToDirectory(targetDirectory);
}
tvZipOpen.InitialDirectory = targetDirectory;
tvZipOpen.ShowDialog();
}
私は .NET 4.5 の ZipFile クラスを使用しており、ここでこのメソッドを呼び出します。
if (tvOpen.ShowDialog() == DialogResult.OK)
{
while (tvOpen.FileName.ToLower().EndsWith(".zip"))
{
Unzip(tvOpen);
}
return tvOpen.FileNames;
}
コードは最初の zip ファイルを抽出するために正常に動作しますが、2 番目の zip ファイルを抽出しようとすると、ローカル ファイル ヘッダーが破損していることを示す InvalidDataException が発生します。ただし、Windowsエクスプローラーでzipファイルを完全に開いて解凍できるため、破損しているとは思いません。それがzip64拡張子の大きなzipファイルであるという事実がそれと関係があるかどうかはわかりませんが、問題が何であれ、Windowsエクスプローラーで開いて抽出したときに問題が発生しないのはなぜですか。これを修正しますか?どんな助けでも大歓迎です。