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)"不能工作?根据这篇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);
}
}
}