c#解压zip文件与目录

本文关键字:文件 解压 zip | 更新日期: 2023-09-27 18:03:45

我使用c# fw4.5。我有一个简单的代码提取一个zip文件。

foreach(ZipArchiveEntry entry in z.entries) //z is a zip file open in ZipArchiveMode.Read
{
        entry.ExtractToFile(entry.FullName);
}

zip文件内部有一个目录,所有文件都在该目录下。当我查看z.Entries时,我看到它是一个数组,其中[0]只是目录,[1],[2],[3]是文件。但是当它尝试做:

entry.ExtractToFile (entry.FullName);

在第一个条目上,我得到一个错误:"文件名、目录名或卷标语法不正确".

我似乎找不出哪里不对。我还需要做什么来打开目录吗?也许是因为条目是一个目录,只有"ExtractToFile(entry. fullname)"不能工作?

c#解压zip文件与目录

根据这篇MSDN文章,ExtractToFile方法需要一个文件的路径(带扩展名),如果指定了目录,将抛出ArgumentException

由于归档文件中的第一个条目是一个目录,而您使用了它的名称作为参数,这就是为什么会出现这个问题。

查看相关的ExtractToDirectory方法,使用方法如下:

ZipFile.ExtractToDirectory(@"c:'zip'archive.zip", @"c:'extract'");

除了Tonkleton的回答之外,我建议您使用第三方压缩库,因为在。net 4.5框架之前的框架版本不支持ZipArchive,我建议您使用DotNetZip,就像在StackOverflow上关于早期框架压缩的其他问题中提到的那样。

替换路径:

void Main()
{
    var zipPath = @"''ai-vmdc1'RedirectedFolders'jlambert'Downloads'cscie33chap1and2.zip";
    var  extractPath = @"c:'Temp'extract";
    using (ZipArchive z = ZipFile.OpenRead(zipPath))
    {
        foreach(ZipArchiveEntry entry in z.Entries) //z is a zip file open in ZipArchiveMode.Read
        {
            entry.ExtractToFile(Path.Combine(extractPath, entry.FullName), true);
        }
    } 
}