首頁 >後端開發 >C++ >使用 MemoryStream 建立記憶體中 ZIP 存檔時如何避免空白條目?

使用 MemoryStream 建立記憶體中 ZIP 存檔時如何避免空白條目?

Linda Hamilton
Linda Hamilton原創
2025-01-07 00:13:50977瀏覽

How to Avoid Empty Entries When Creating an In-Memory ZIP Archive with MemoryStream?

使用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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn