首页 > 后端开发 > C++ > 我可以在不使用 FileStream 的情况下使用 MemoryStream 在内存中创建 ZIP 存档吗?

我可以在不使用 FileStream 的情况下使用 MemoryStream 在内存中创建 ZIP 存档吗?

Susan Sarandon
发布: 2025-01-07 00:18:47
原创
584 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板