c#解压缩目录为

时间:2015-07-21 16:22:35

标签: c# zip

我正在使用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)”无法正常工作?

先谢谢。

3 个答案:

答案 0 :(得分:1)

根据this MSDN articleExtractToFile方法需要一个文件路径(带扩展名),如果指定了目录,则会抛出ArgumentException

由于存档中的第一个条目是一个目录,并且您使用其名称作为参数,因此您遇到此问题。

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

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

答案 1 :(得分:0)

除了Tonkleton的回答,我建议您使用第三方压缩库,因为.Net 4.5框架之前的框架版本不支持ZipArchive,我可以建议DotNetZip关于StackOverflow早期框架中的压缩的其他问题。

答案 2 :(得分:-1)

替换你的路径:

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);
        }
    } 
}