从不可搜索的流中打开 System.IO.Packaging.Package
Opening a System.IO.Packaging.Package from a non-seekable Stream
我正在尝试解压缩 System.IO.Packaging.Package
that I received from a web server. That is, I am using the System.IO.Packaging.Package.Open(Stream)
方法并将其传递给 System.Net.HttpWebResponse
的响应流。不幸的是,这引发了一个 System.ArgumentException
告诉我它
Cannot operate on [a] stream that does not support seeking.
查看参考资料,发现 System.IO.Packaging.Package
使用 System.IO.Packaging.ZipPackage
作为其唯一实现,而后者又使用内部 ZipArchive
class。果然,如果 stream.CanSeek
是 false
,ValidateModeAccessStreamStreamingCombinations()
方法会在第 588 行引发此异常,我的 HttpWebResponse
.
的响应流就是这种情况
然而,有一个神奇的 streaming
参数,它显然总是 false
并且从 Package.Open()
方法一直传递到 ValidateModeAccessStreamStreamingCombinations()
.
所以这是我的问题:有什么方法可以使用 Package.Open(Stream)
从不可搜索的流中动态构建 Package
吗?或者我是否必须将流内容缓存在某个地方,例如在 MemoryStream
中? (我真的不想那样做,因为我对解压后的包流不感兴趣。)
呵呵,没关系。 streaming
参数仅用于即时 写入 一个 System.IO.Packaging.Package
。从 line 954 there are a bunch of "Write-time streaimg API" methods. There also is a ThrowIfInStreamingCreation()
方法开始,它只在我尝试编写包时引发异常。
所以,是的,我必须将来自 HttpWebResponse
的不可搜索流缓存在 MemoryStream
或临时文件中。没有为我即时拆包:(
我正在尝试解压缩 System.IO.Packaging.Package
that I received from a web server. That is, I am using the System.IO.Packaging.Package.Open(Stream)
方法并将其传递给 System.Net.HttpWebResponse
的响应流。不幸的是,这引发了一个 System.ArgumentException
告诉我它
Cannot operate on [a] stream that does not support seeking.
查看参考资料,发现 System.IO.Packaging.Package
使用 System.IO.Packaging.ZipPackage
作为其唯一实现,而后者又使用内部 ZipArchive
class。果然,如果 stream.CanSeek
是 false
,ValidateModeAccessStreamStreamingCombinations()
方法会在第 588 行引发此异常,我的 HttpWebResponse
.
然而,有一个神奇的 streaming
参数,它显然总是 false
并且从 Package.Open()
方法一直传递到 ValidateModeAccessStreamStreamingCombinations()
.
所以这是我的问题:有什么方法可以使用 Package.Open(Stream)
从不可搜索的流中动态构建 Package
吗?或者我是否必须将流内容缓存在某个地方,例如在 MemoryStream
中? (我真的不想那样做,因为我对解压后的包流不感兴趣。)
呵呵,没关系。 streaming
参数仅用于即时 写入 一个 System.IO.Packaging.Package
。从 line 954 there are a bunch of "Write-time streaimg API" methods. There also is a ThrowIfInStreamingCreation()
方法开始,它只在我尝试编写包时引发异常。
所以,是的,我必须将来自 HttpWebResponse
的不可搜索流缓存在 MemoryStream
或临时文件中。没有为我即时拆包:(