2

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

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

查看参考源,结果发现System.IO.Packaging.PackageSystem.IO.Packaging.ZipPackage用作其唯一的实现,而后者又使用内部ZipArchive类。果然,ValidateModeAccessStreamStreamingCombinations()如果stream.CanSeek来自falsemy HttpWebResponse.

然而,有一个神奇的streaming参数,显然,总是falsePackage.Open()方法一直传递到ValidateModeAccessStreamStreamingCombinations().

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

4

1 回答 1

1

呵呵,没关系。该streaming参数仅用于动态写入a System.IO.Packaging.Package。从第 954 行开始,有一堆“Write-time streimg API”方法。还有一种ThrowIfInStreamingCreation()方法,它只在我尝试编写包时引发异常。

所以是的,我必须从HttpWebResponse一个MemoryStream或一个临时文件中缓存不可搜索的流。我没有即时拆包:(

于 2015-05-04T16:55:31.350 回答