我正在尝试解压缩从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.CanSeek
为false
,则HttpWebResponse
的响应流就是这种情况。
但是,有一个神奇的streaming
参数显然始终为false
,并且从Package.Open()
方法一直传递到ValidateModeAccessStreamStreamingCombinations()
。< / p>
所以这是我的问题:有没有办法使用Package.Open(Stream)
从不可搜索的流中动态构建Package
?或者我是否必须在某处缓存流内容,例如在MemoryStream
中? (我真的不想那样做,因为一旦我解压缩它,我对包流不感兴趣。)
答案 0 :(得分:1)
streaming
参数仅用于写 System.IO.Packaging.Package
。从line 954开始,有一堆“Write-time streaimg API”方法。还有一个ThrowIfInStreamingCreation()
方法,当我尝试编写包时只会引发异常。
所以是的,我必须在HttpWebResponse
或临时文件中缓存来自MemoryStream
的不可搜索流。没有动态拆包给我:(