DotNetZip имеет индексатор строк в классе ZipFile, чтобы сделать это действительно простым.
using (ZipFile zip = ZipFile.Read(sourcePath)
{
zip["NameOfFileToUnzip.txt"].Extract();
}
Вам не нужно возиться с входными потоками и выходными потоками и т. Д., Просто чтобы извлечь файл. С другой стороны, если вам нужен поток, вы можете получить его:
using (ZipFile zip = ZipFile.Read(sourcePath)
{
Stream s = zip["NameOfFileToUnzip.txt"].OpenReader();
// fiddle with stream here
}
Вы также можете делать подстановочные знаки.
using (ZipFile zip = ZipFile.Read(sourcePath)
{
// extract all XML files in the archive
zip.ExtractSelectedEntries("*.xml");
}
Существуют перегрузки для указания перезаписи / отсутствия перезаписи, различных целевых каталогов и т. Д. Вы также можете извлекать данные на основе критериев, отличных от имени файла. Например, извлеките все файлы, которые новее 15 января 2009 года:
// extract all files modified after 15 Jan 2009
zip.ExtractSelectedEntries("mtime > 2009-01-15");
И вы можете комбинировать критерии:
// extract all files that are modified after 15 Jan 2009) AND larger than 1mb
zip.ExtractSelectedEntries("mtime > 2009-01-15 and size > 1mb");
// extract all XML files that are modified after 15 Jan 2009) AND larger than 1mb
zip.ExtractSelectedEntries("name = *.xml and mtime > 2009-01-15 and size > 1mb");
Вам не нужно извлекать выбранные вами файлы. Вы можете просто выбрать их, а затем принять решение о том, извлекать или нет.
using (ZipFile zip1 = ZipFile.Read(ZipFileName))
{
var PhotoShopFiles = zip1.SelectEntries("*.psd");
// the selection is just an ICollection<ZipEntry>
foreach (ZipEntry e in PhotoShopFiles)
{
// examine metadata here, make decision on extraction
e.Extract();
}
}