首页 >后端开发 >C++ >如何使用 C# 成功创建内存中 ZIP 存档并避免'无效 ZIP”错误?

如何使用 C# 成功创建内存中 ZIP 存档并避免'无效 ZIP”错误?

Barbara Streisand
Barbara Streisand原创
2025-01-07 00:33:46239浏览

How to Successfully Create an In-Memory ZIP Archive Using C# and Avoid the

使用 System.IO.Compression 在内存中创建 ZIP 存档:克服无效的 ZIP 错误

尝试在内存中创建 ZIP 存档时使用 MemoryStream 存储内存时,您可能会遇到创建存档但缺少所需内容的问题。出现此问题的原因是需要将最终字节(例如校验和)写入存档才能完成。

要解决此问题,您可以使用以下修改后的代码:

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);
   }
}

这里的关键区别是 ZipArchive 构造函数中的第三个参数,该参数设置为 true。此参数指示可以在不关闭基础流的情况下处置 ZipArchive。这允许您在创建存档后重用 MemoryStream。

通过使用修改后的代码,即使使用 MemoryStream,您也可以在内存中成功创建具有所需内容的 ZIP 存档。这种灵活性使您可以在各种场景下操作档案,而无需中间文件处理。

以上是如何使用 C# 成功创建内存中 ZIP 存档并避免'无效 ZIP”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn