ich Ionic.Zip bin mit ZipFile zu Speicher-Stream mit dieser Methode zu extrahieren:Lesen ionische Zip als Speicher-Stream C#
private MemoryStream GetReplayZipMemoryStream()
{
MemoryStream zipMs = new MemoryStream();
using (ZipFile zip = ZipFile.Read(myFile.zip))
{
foreach (ZipEntry zipEntry in zip)
{
if (zipEntry.FileName.StartsWith("Aligning") || zipEntry.FileName.StartsWith("Sensing"))
{
zipEntry.Extract(zipMs);
}
}
}
zipMs.Seek(0, SeekOrigin.Begin);
return zipMs;
}
Sobald ich Extrahieren bin fertig, ich will die Ströme lesen und einige der erhalten Einträge basierend auf dem Eintrag Dateiname. Wie kann ich das machen?
Ich habe versucht, indem sie mit dem folgenden Code aufrufen, aber ich bekomme Fehler auf dem ZipFile.Read(ms)
die sagte:
für diedass als ZipFile Kann nicht
Stream ms = GetReplayZipMemoryStream();
using (ZipFile zip = ZipFile.Read(ms))
{
ZipEntry imageEntry = zip.Entries.First(x => x.FileName.EndsWith(".png"));
using (Stream s = imageEntry.OpenReader())
{
var image = Image.FromStream(s);
pictureBox1.Image = image;
}
}
Vielen Dank im Voraus lesen Hilfe!
Bytes Nachdem Sie 'Extrahieren von()' die Daten getan haben (im Mem-Stream) ist nicht mehr gezippt ... Sie haben eine Reihe von verketteten unkomprimierten Dateien. –
Wie Henk Holterman vorschlägt, sollten Sie, wenn Sie nicht mit verschachtelten Zip-Dateien arbeiten, die Dateien nicht noch einmal im zweiten Snippet entpacken. Können Sie eine Beispielstruktur der Dateien angeben, die Sie entpacken möchten? Alternativ würde ich vorschlagen, dass Sie die gesamte Filterung in der ersten Schleife durchführen und vielleicht sogar das Bild dort erstellen, um nicht alle Dateien, die Sie lesen möchten, in einen einzigen Stream zu schreiben. –
Zusätzlich zu der Beobachtung, die Henk gemacht hat, schlage ich vor, dass Sie Ionic.Zip dafür nicht verwenden. .NET verfügt jetzt über die 'ZipArchive'-Klasse, die integrierte Funktionen zum Verarbeiten von ZIP-Dateien bietet und die IMHO bequemer ist als der Code, den Sie jetzt haben. –