我想将已下载的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();
parts
和rels
不包含任何内容。
有谁能告诉我我做错了什么?
MemoryStream
是否是错误的流类型?
此方案中的Package
类是否为ZIP文件的错误类?
如果您可以告诉我任何替代方案,请不要进行第三方项目。
谢谢!
更新
重复问题中的This回答解决了我的问题(ZipArchive类)。接受的答案使用第三方项目。
答案 0 :(得分:1)
如何处理.zip文件,取决于您使用的Framework版本。流是完全可互换的,甚至可以相互封装。问题是,如果你拥有一个可以实际获取流并执行zip操作的类。
如果您至少拥有Framework 4.5,那么您获得了ZipArchive class,这一切都是儿童游戏。这些示例采用Stream,它可以是Stream抽象类的任何实现。所有内存流都是一个现成的流。
如果你在那之下,我很确定你被软管了。只有 没有类可以在4.5之前接受Stream并对其执行ZIP操作。大多数方法都会将.zip文件保存在磁盘上并使用带有IO重定向的控制台程序对其进行解压缩。 Windows ZIP功能和7zip都适用于此,但都涉及在磁盘上写入。
也许你可以使用7-zip的代码部分来进行进程内/内存zip操作。但这可能很棘手。