无法解压缩.zip文件。获取无效的数据异常

时间:2013-11-05 12:40:53

标签: c# .net unzip zipfile

我有一个非常大的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资源管理器中打开并解压缩时,我怎么没有遇到问题以及如何我能解决这个问题吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

c#不支持.zip64扩展名。

你的zip文件有多大,因为如果它在4GiB下重命名为.zip,它应该可以正常工作,如果它大于那个

http://dotnetzip.codeplex.com/

更改文件扩展名

  1. 打开Windows资源管理器,然后按Alt + V
  2. 然后转到工具,然后转到文件夹选项,并确保取消选中已知文件类型的隐藏扩展名框,然后单击“应用”并确定。
  3. 然后只需重命名该文件即可从扩展程序中移除64,以便它只是.zip
  4. 然后在提示中单击“是”
  5. 然后您应该可以在程序中打开该文件
  6. 希望这会有所帮助