2

我有一个非常大的 zip 文件,其中包含其他 zip 文件。我希望我的 c# 程序能够识别该文件是一个 zip 文件,如果它是一个 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 文件,但是当我尝试提取第二个 zip 文件时,我得到一个 InvalidDataException,它说本地文件头已损坏。但是,我认为它没有损坏,因为我能够在 Windows 资源管理器中完美地打开和提取 zip 文件。我不确定它是一个带有 zip64 扩展名的大型 zip 文件这一事实是否与它有关,但无论问题是什么,当我在 Windows 资源管理器中打开和提取时我为什么没有遇到问题以及如何我要解决这个问题吗?任何帮助将不胜感激。

4

1 回答 1

0

c# 不支持.zip64扩展。

您的 zip 文件有多大,因为如果它在 4GiB 下将其重命名为 .zip,并且如果它大于该文件,它应该可以正常工作,请参阅此

http://dotnetzip.codeplex.com/

更改文件扩展名

  1. 打开 Windows 资源管理器并按 Alt + V
  2. 然后转到工具,然后转到文件夹选项,并确保未选中隐藏已知文件类型的扩展名框,然后单击应用并确定。
  3. 然后只需重命名文件以64从扩展名中删除.zip
  4. 然后在提示上单击是
  5. 然后你应该能够在你的程序中打开文件

希望这可以帮助

于 2013-11-05T13:07:00.177 回答