我正在使用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)”无法正常工作?先谢谢。
答案 0 :(得分:1)
根据this MSDN article,ExtractToFile
方法需要一个文件路径(带扩展名),如果指定了目录,则会抛出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);
}
}
}