使用MemoryStream 在記憶體中建立ZIP 檔案:克服空白條目問題
嘗試使用MemoryStream 在記憶體中建立人員遇上到了一個特殊的問題:即使寫入了對應的文字文件,創建的存檔仍包含一個空文件。此行為歸因於過程中缺少一個步驟。
要解決此問題,關鍵是在嘗試存取其底層流之前對 ZipArchive 物件呼叫 Dispose。這種做法是必要的,因為 ZipArchive 將最終位元組寫入存檔的校驗和,使其完整。但是,如果我們希望流保持開啟狀態以供進一步使用,則需要將 true 作為第三個參數傳遞給 ZipArchive。
以下是包含此解決方案的修訂後的程式碼片段:
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); } }
透過遵循此方法,開發人員可以使用MemoryStream 在記憶體中成功建立完整的ZIP 存檔,而不會遇到空條目的問題。
以上是使用 MemoryStream 建立記憶體中 ZIP 存檔時如何避免空白條目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!