gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:08:35 27 4
gpt4 key购买 nike

我正在尝试解压 System.IO.Packaging.Package我从网络服务器收到的。也就是说,我正在使用 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 类。果然,ValidateModeAccessStreamStreamingCombinations()如果 stream.CanSeekfalse,我的 HttpWebResponse 的响应流就是这种情况,方法会在第 588 行引发此异常。

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

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

最佳答案

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

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

关于c# - 从不可搜索的流中打开 System.IO.Packaging.Package,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966113/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com