【问题标题】:Open ZIP Package from MemoryStream [duplicate]从 MemoryStream 打开 ZIP 包 [重复]
【发布时间】:2018-01-19 13:58:37
【问题描述】:

我想处理下载到内存中的 ZIP 文件的内容(不使用硬盘!)。 packageStream 包含 ZIP 文件的字节。

MemoryStream packageStream = // Stream of downloaded ZIP file    
var zipPackage = System.IO.Packaging.Package.Open(packageStream, FileMode.Open, System.IO.FileAccess.Read);
var parts = zipPackage.GetParts();
var rels = zipPackage.GetRelationships();

partsrels 不包含任何项目。

谁能告诉我我做错了什么?

MemoryStream 是错误的流类型吗?

Package 类是 场景中 ZIP 文件的错误类吗?

如果您能告诉我任何替代方案,请不要使用第三方项目。

谢谢!

更新

This 重复问题中的答案解决了我的问题(ZipArchive 类)。接受的答案使用第三方项目。

【问题讨论】:

  • “MemoryStream 是错误的流类型吗?” 为什么不直接将其保存到文件中然后尝试打开它(仅用于测试目的)?
  • @AleksAndreev 已成功测试。

标签: c# zip memorystream


【解决方案1】:

如何处理 .zip 文件取决于您使用的框架版本。流是完全可互换的,甚至可以相互封装。问题是您是否拥有一个可以实际获取流并执行 zip 操作的类。

如果您至少拥有 Framework 4.5,那么您将获得 ZipArchive class,而这一切都是童玩。这些示例采用 Stream,它可以是 Stream 抽象类的任何实现。所有的内存流都是一个readyonly流。

如果你处于这种情况下,我很确定你已经被水淹没了。在 4.5 之前,没有可以接受 Stream 并对其进行 ZIP 操作的类。大多数方法都涉及将 .zip 文件保存在磁盘上并使用带有 IO 重定向的控制台程序对其进行解压缩。 Windows ZIP 功能和 7zip 都适用于此,但都涉及在磁盘上写入。

也许您可以使用 7-zip 的代码部分来执行进程内/内存中的 zip 操作。但这可能有点棘手。

【讨论】:

  • ZipArchive 类做到了...谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 2016-01-24
  • 2014-08-17
  • 1970-01-01
相关资源
最近更新 更多