从不可查找的流中打开 System.IO.Packaging.package



我正在尝试解压缩从Web服务器收到的System.IO.Packaging.Package。也就是说,我正在使用System.IO.Packaging.Package.Open(Stream)方法并向其传递System.Net.HttpWebResponse的响应流。不幸的是,这引起了一个System.ArgumentException告诉我

无法对不支持查找的 [a] 流进行操作。

查看引用源,事实证明System.IO.Packaging.Package使用System.IO.Packaging.ZipPackage作为其唯一的实现,而该实现又使用内部ZipArchive类。果然,如果stream.CanSeekfalseValidateModeAccessStreamStreamingCombinations()方法会在第 588 行引发此异常,而来自我的HttpWebResponse的响应流就是这种情况。

但是,有一个神奇的streaming参数,显然,它总是false的,并且从Package.Open()方法一直传递到ValidateModeAccessStreamStreamingCombinations()

所以我的问题来了:有没有办法使用Package.Open(Stream)从不可寻回的流中即时构建Package?还是我必须将流内容缓存在某个地方,例如在MemoryStream中?(我真的不想这样做,因为一旦我解压缩了包流,我就对它不感兴趣。

呵呵,没关系。streaming参数仅用于动态编写System.IO.Packaging.Package。从第 954 行开始,有一堆"写入时 streaimg API"方法。还有一个ThrowIfInStreamingCreation()方法,它仅在我尝试编写包时引发异常。

所以是的,我必须将来自HttpWebResponse的不可搜索流缓存在MemoryStream或临时文件中。没有即时为我拆包:(

相关内容

  • 没有找到相关文章

最新更新