Heim >Backend-Entwicklung >C++ >Kann ich mit MemoryStream ein ZIP-Archiv im Speicher erstellen, ohne FileStream zu verwenden?
ZIP-Archiv im Speicher mit MemoryStream erstellen
Beim Versuch, mit MemoryStream ein ZIP-Archiv im Speicher zu erstellen, stoßen Benutzer möglicherweise auf ein Szenario, in dem Die Archivdatei wird generiert, es fehlt jedoch die erwartete Inhaltsdatei. Das Ersetzen des MemoryStream durch einen FileStream behebt das Problem. Ist es jedoch möglich, einen MemoryStream für die Erstellung von ZIP-Archiven zu verwenden, ohne auf einen FileStream zurückzugreifen?
Die Lösung liegt im Verständnis der inneren Funktionsweise von ZipArchive. Bevor das Archiv als vollständig betrachtet werden kann, müssen bestimmte wichtige Bytes, wie z. B. Prüfsummen, geschrieben werden. Standardmäßig schließt ZipArchive den Stream, um diesen Vorgang auszuführen, aber im Fall eines MemoryStream verhindert diese Aktion die spätere Verwendung des Streams.
Um dies zu umgehen, kann der dritte Parameter von ZipArchive auf true gesetzt werden, Dies ermöglicht das Schreiben der letzten Bytes, ohne den Stream zu schließen. Der überarbeitete Code unten veranschaulicht diesen Ansatz:
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 Einbeziehung dieser Anpassung können Benutzer mit MemoryStream erfolgreich ZIP-Archive im Speicher erstellen, ohne die Integrität oder Vollständigkeit des Archivs zu beeinträchtigen.
Das obige ist der detaillierte Inhalt vonKann ich mit MemoryStream ein ZIP-Archiv im Speicher erstellen, ohne FileStream zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!