2

その中に他の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エクスプローラーで開いて抽出したときに問題が発生しないのはなぜですか。これを修正しますか?どんな助けでも大歓迎です。

4

1 に答える 1

0

.zip64c# は拡張機能をサポートしていません。

4GiB 未満の場合は .zip に名前を変更し、それよりも大きい場合は正常に動作するはずなので、zip ファイルのサイズはこれを参照してください

http://dotnetzip.codeplex.com/

ファイル拡張子を変更するには

  1. Windows エクスプローラーを開き、Alt + V を押します。
  2. 次に、[ツール]、[フォルダー オプション] の順に移動し、[既知のファイル タイプの拡張子を非表示にする] チェック ボックスがオフになっていることを確認し、[適用] をクリックして [OK] をクリックします。
  3. 次に、ファイルの名前を変更して拡張子から を削除する64だけです。.zip
  4. 次に、プロンプトで[はい]をクリックします
  5. そして、プログラムでファイルを開くことができるはずです

お役に立てれば

于 2013-11-05T13:07:00.177 に答える