Erstellen eines ZIP-Archivs im Speicher mit MemoryStream: Überwindung des Problems mit leeren Einträgen
Beim Versuch, mit einem MemoryStream ein ZIP-Archiv im Speicher zu erstellen sind Entwickler auf ein eigenartiges Problem gestoßen: Das erstellte Archiv enthält eine leere Datei, obwohl die entsprechende Textdatei geschrieben wurde. Dieses Verhalten wird auf einen fehlenden Schritt im Prozess zurückgeführt.
Um dieses Problem zu beheben, besteht der Schlüssel darin, Dispose für das ZipArchive-Objekt aufzurufen, bevor versucht wird, auf den zugrunde liegenden Stream zuzugreifen. Diese Vorgehensweise ist notwendig, da ZipArchive die letzten Bytes in die Prüfsumme des Archivs schreibt und es so vervollständigt. Wenn wir jedoch möchten, dass der Stream für die weitere Verwendung geöffnet bleibt, müssen wir true als dritten Parameter an ZipArchive übergeben.
Hier ist ein überarbeiteter Codeausschnitt, der diese Lösung enthält:
using (var memoryStream = new MemoryStream()) { using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) { 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)) { memoryStream.Seek(0, SeekOrigin.Begin); memoryStream.CopyTo(fileStream); } }
Durch die Befolgung dieses Ansatzes können Entwickler mit einem MemoryStream erfolgreich ein vollständiges ZIP-Archiv im Speicher erstellen, ohne auf das Problem leerer Einträge zu stoßen.
Das obige ist der detaillierte Inhalt vonWie vermeide ich leere Einträge beim Erstellen eines In-Memory-ZIP-Archivs mit MemoryStream?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!