[英]Extract a ZIP file programmatically by DotNetZip library?
我有一个获取 ZIP 文件并将其解压缩到目录的函数(我使用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 类中有一个 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 结合使用。 使用类似“name = *.txt AND size >= 100k”的字符串作为 selectionCriteria 将检索名称以 .txt 结尾且未压缩大小大于或等于 100 KB 的条目。
这里有一些标准样本
标准(检索的文件)
name != *.xls(扩展名不是 .xls 的任何文件)
名称 = *.mp3(任何带有 .mp3 扩展名的文件)
*.mp3(同上,任何带有 .mp3 扩展名的文件)
属性 = A(属性包括存档位的所有文件)
属性 != H(属性不包括隐藏位的所有文件)
mtime > 2009-01-01(最后修改时间在2009年1月1日之后的所有文件)
大小 > 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
子句中使用您想要的任何查询条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.