我有得到一个ZIP文件中的函数,并将其解压到一个目录 (I使用 DotNetZip 库。)

public void ExtractFileToDirectory(string zipFileName, string outputDirectory)
{
     ZipFile zip = ZipFile.Read(zipFileName);
     Directory.CreateDirectory(outputDirectory);
     zip.ExtractAll(outputDirectory,ExtractExistingFileAction.OverwriteSilently);
}

我的ZIP文件包含多个文件和目录。但我想只提取 某些文件不是所有的人的。

我怎样才能使这项工作?

其他提示

有在使用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子句中想要的查询条件。

scroll top