Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t extract.zip文件。获取无效数据异常_C#_.net_Unzip_Zipfile - Fatal编程技术网

C# Can';t extract.zip文件。获取无效数据异常

C# Can';t extract.zip文件。获取无效数据异常,c#,.net,unzip,zipfile,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 ta

我有一个非常大的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资源管理器中打开并解压缩时,为什么我没有遇到问题?我该如何解决这个问题?非常感谢您的帮助。

c#不支持
.zip64
扩展

你的zip文件有多大,因为如果它在4GiB下,请将其重命名为.zip,如果它大于该值,则应该可以正常工作。请参见此图

更改文件扩展名的步骤

  • 打开windows资源管理器并按Alt+V
  • 然后转到“工具”和“文件夹选项”,确保未选中“隐藏已知文件类型的扩展名”框,然后单击“应用”和“确定”
  • 然后简单地重命名文件,从扩展名中删除
    64
    ,使其成为
    .zip
  • 然后在提示中单击yes
  • 然后你就可以在你的程序中打开这个文件了

  • 希望这有帮助

    这也是我的想法,但是我怎么能在windows资源管理器中提取zip文件呢?windows资源管理器不是也在使用.NET吗?如果windows资源管理器有一个解决方案,那么就必须有一个解决方案,对吗?因为windows资源管理器支持
    .zip64
    ,所以打开文件不会有问题,但c#没有解决方案请参阅我的回答中的链接好的,非常感谢您的帮助。如何将文件重命名为.zip并删除.zip64扩展名?