从MemoryStream打开ZIP包

时间:2018-01-19 13:58:37

标签: c# zip memorystream

我想将已下载的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类)。接受的答案使用第三方项目。

1 个答案:

答案 0 :(得分:1)

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

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

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

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