首頁 >後端開發 >C++ >我可以在不使用 FileStream 的情況下使用 MemoryStream 在記憶體中建立 ZIP 檔案嗎?

我可以在不使用 FileStream 的情況下使用 MemoryStream 在記憶體中建立 ZIP 檔案嗎?

Susan Sarandon
Susan Sarandon原創
2025-01-07 00:18:47579瀏覽

Can I Create a ZIP Archive in Memory Using MemoryStream Without Using FileStream?

使用MemoryStream 在記憶體中建立ZIP 檔案

嘗試使用MemoryStream 在記憶體中建立ZIP 檔案時,使用者可能會遇到以下情況:存檔文件已生成,但缺少預期的內容文件。用 FileStream 取代 MemoryStream 可以解決這個問題。但是,在不借助 FileStream 的情況下利用 MemoryStream 建立 ZIP 檔案是否可行?

解決方案在於了解 ZipArchive 的內部運作原理。在存檔被視為完整之前,需要寫入某些關鍵字節(例如校驗和)。預設情況下,ZipArchive 會關閉流來執行此操作,但在 MemoryStream 的情況下,此操作會阻止後續使用流。

為了克服這個問題,可以將 ZipArchive 的第三個參數設為 true,這使得在不關閉流的情況下寫入最終位元組成為可能。以下修改後的程式碼示範了這個方法:

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 存檔,而不會影響存檔的完整性或完整性。

以上是我可以在不使用 FileStream 的情況下使用 MemoryStream 在記憶體中建立 ZIP 檔案嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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