提取由DotNetZip库编程的ZIP文件?
题
我有得到一个ZIP文件中的函数,并将其解压到一个目录 (I使用 DotNetZip 库。)
public void ExtractFileToDirectory(string zipFileName, string outputDirectory)
{
ZipFile zip = ZipFile.Read(zipFileName);
Directory.CreateDirectory(outputDirectory);
zip.ExtractAll(outputDirectory,ExtractExistingFileAction.OverwriteSilently);
}
我的ZIP文件包含多个文件和目录。但我想只提取 某些文件不是所有的人的。
我怎样才能使这项工作?
解决方案
您需要测试每个 ZipEntry的一>,看是否要提取它:
public void ExtractFileToDirectory(string zipFileName, string outputDirectory)
{
ZipFile zip = ZipFile.Read(zipFileName);
Directory.CreateDirectory(outputDirectory);
foreach (ZipEntry e in zip)
{
// check if you want to extract e or not
if(e.FileName == "TheFileToExtract")
e.Extract(outputDirectory, ExtractExistingFileAction.OverwriteSilently);
}
}
ZipFile zip = ZipFile.Read(zipFileName); //Runs in framework 4.5
其他提示
有在使用ZipFile类ExtractSelectedEntries方法。这里的方法签名。
public void ExtractSelectedEntries(string selectionCriteria, string directoryPathInArchive, string extractDirectory, ExtractExistingFileAction extractExistingFile)
所以在你的程序,你可以简单地通过提供selectionCriteria提取指定的文件。
public void ExtractFileToDirectory(string zipFileName, string outputDirectory)
{
ZipFile zip = ZipFile.Read(zipFileName);
Directory.CreateDirectory(outputDirectory);
zip.ExtractSelectedEntries("name = *.doc", "document\", outputDirectory, ExtractExistingFileAction.OverwriteSilently);
}
您可以用连词AND或OR结合的标准。使用一个字符串,如“名称= * .txt和大小> = 100K”为selectionCriteria检索条目,其名称结束。txt文件,并且其未压缩的大小大于或等于100千字节。
这里有一些标准样品
<强>标准(文件检索)强>
名字!= * .xls的(具有扩展名不是的.xls任何文件)
名= * .MP3(任意带有.mp3扩展名的文件)
*。MP3(与上述相同,具有.mp3扩展名的任意文件)
属性= A(所有文件,它们的属性包括存档位)
属性!= H(其属性的所有文件不包括隐藏位)
修改时间> 2009-01-01(年1月以后与最后修改时间的所有文件,2009)
大小> 2GB(所有文件,其未压缩的大小是大于2GB)
有关多个参考,应该独自与库读取的API文档。
您还可以使用LINQ来选择要提取哪些条目。例如:
using (var zip = ZipFile.Read(ArchiveToRead))
{
var selection = from e in zip.Entries
where System.IO.Path.GetFileName(e.FileName).StartsWith("C")
select e;
foreach (var e in selection)
e.Extract(extractDir);
}
当然你也可以用你的where
子句中想要的查询条件。
不隶属于 StackOverflow