代码之家  ›  专栏  ›  技术社区  ›  Christian St.

从MemoryStream打开ZIP包[重复]

  •  0
  • Christian St.  · 技术社区  · 7 年前

    我想处理一个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类)。接受的答案使用第三方项目。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Christopher    7 年前

    如何处理。zip文件,取决于您使用的框架版本。流是完全可互换的,甚至可以彼此封装。问题是如果你 一个实际上可以接受流并执行zip操作的类。

    如果您至少有Framework 4.5,那么 ZipArchive class 这整件事都是儿童节目。这些示例以流为例,它可以是流抽象类的任何实现。所有的内存流都是一个readyonly流。

    如果你在这种情况下,我敢肯定你被套住了。这里很简单 在4.5之前,没有任何类可以接受流并对其执行ZIP操作。大多数方法都涉及保存。zip文件,并使用带有IO重定向的控制台程序对其进行解压缩。Windows ZIP Functionality和7zip都可以做到这一点,但都需要在磁盘上进行写入。

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