Erstellen Sie ein ZIP-Archiv in den Speicher Mit dem System.IO.Kompression

Ich versuche, erstellen Sie ein ZIP-Archiv mit einem einfachen demo-text-Datei mit einem MemoryStream wie folgt:

using (var memoryStream = new MemoryStream())
using (var archive = new ZipArchive(memoryStream , ZipArchiveMode.Create))
{
    var demoFile = archive.CreateEntry("foo.txt");

    using (var entryStream = demoFile.Open())
    using (var streamWriter = new StreamWriter(entryStream))
    {
        streamWriter.Write("Bar!");
    }

    using (var fileStream = new FileStream(@"C:\Temp\test.zip", FileMode.Create))
    {
        stream.CopyTo(fileStream);
    }
}

Wenn ich diesen code ausführen, wird die Archiv-Datei selbst erstellt, aber foo.txt nicht.

Jedoch, wenn ich ersetzen Sie den MemoryStream direkt mit der stream-Datei, das Archiv wird korrekt erstellt:

using (var fileStream = new FileStream(@"C:\Temp\test.zip", FileMode.Create))
using (var archive = new ZipArchive(fileStream, FileMode.Create))
{
    //...
}

Ist es möglich, eine MemoryStream zu erstellen, das ZIP-Archiv ohne die FileStream?

könnte es sein, etwas zu tun mit entsorgen? in Beispiel Sie das nicht tun using für die entry.Open, nur eine Vermutung.
In diesem Fall, ich sollte bekommen haben, eine ObjectDisposedException oder zumindest eine leere Datei, sollte ich nicht?
Ihre Dateien-position geht an das Ende der Datei, so dass es nicht in der Lage ist, etwas zu schreiben, so dass, wenn Sie versuchen, zurücksetzen der position-Eigenschaft des stream 0 wird es funktionieren.
Veraltet.. (ich wusste nicht, über die "nicht entsorgen basestream" - option erwähnt, in der Antwort!)
F. Y. I.: braucht man mindestens .NET 4.5 .ZipArchive. Siehe Rick Strahl .NET 4.5 ist ein direktes Ersatz für .NET 4.0 ~~ siehe auch ich finde nicht "ZipFile" - Klasse in " - System.IO.Compression-namespace"

InformationsquelleAutor Marius Schulz | 2013-06-21

Schreibe einen Kommentar