从不可搜索的流中打开System.IO.Packaging.Package

时间:2015-04-30 11:07:27

标签: c# .net system.io.packaging

我正在尝试解压缩从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类。当然,ValidateModeAccessStreamStreamingCombinations()方法会在第588行引发此异常,如果stream.CanSeekfalse,则HttpWebResponse的响应流就是这种情况。

但是,有一个神奇的streaming参数显然始终为false,并且从Package.Open()方法一直传递到ValidateModeAccessStreamStreamingCombinations()。< / p>

所以这是我的问题:有没有办法使用Package.Open(Stream)从不可搜索的流中动态构建Package?或者我是否必须在某处缓存流内容,例如在MemoryStream中? (我真的不想那样做,因为一旦我解压缩它,我对包流不感兴趣。)

1 个答案:

答案 0 :(得分:1)

嗯,没关系。 streaming参数仅用于 System.IO.Packaging.Package。从line 954开始,有一堆“Write-time streaimg API”方法。还有一个ThrowIfInStreamingCreation()方法,当我尝试编写包时只会引发异常。

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