DotNetZip ma podziałowe ciąg na klasie zipfile aby to naprawdę proste.
using (ZipFile zip = ZipFile.Read(sourcePath)
{
zip["NameOfFileToUnzip.txt"].Extract();
}
Nie trzeba się bawić z inputstreams i outputstreams i tak dalej, tak aby wyodrębnić plik. Z drugiej strony, jeśli chcesz strumień, możesz go uzyskać:
using (ZipFile zip = ZipFile.Read(sourcePath)
{
Stream s = zip["NameOfFileToUnzip.txt"].OpenReader();
// fiddle with stream here
}
Można również wykonywać ekstrakcje wieloznaczne.
using (ZipFile zip = ZipFile.Read(sourcePath)
{
// extract all XML files in the archive
zip.ExtractSelectedEntries("*.xml");
}
Istnieje przeciążenia aby określić nadpisanie/no-nadpisać różne katalogi docelowe itd Można także wyodrębnić na podstawie kryteriów innych niż nazwy pliku. Na przykład wyodrębnić wszystkie pliki nowsze niż 15 stycznia 2009:
// extract all files modified after 15 Jan 2009
zip.ExtractSelectedEntries("mtime > 2009-01-15");
I można połączyć kryteria:
// 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");
Nie trzeba wyodrębnić pliki, które można wybrać. Możesz je po prostu wybrać, a następnie podjąć decyzję, czy wyodrębnić, czy nie.
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();
}
}
jeśli chcę, aby wyodrębnić kilka plików z pliku zip do folderu, jak to zrobić?Na przykład chcę uzyskać pliki z prefiksem "dobry", jak to zrobić z moim kodem: "var ze = zf.GetEntry (" good * ");". Dzięki za wszelkie pomysły. –