C# 从不可查找的流打开System.IO.Packaging.Package
我正在尝试解压缩从web服务器收到的文件。也就是说,我正在使用该方法并将C# 从不可查找的流打开System.IO.Packaging.Package,c#,.net,system.io.packaging,C#,.net,System.io.packaging,我正在尝试解压缩从web服务器收到的文件。也就是说,我正在使用该方法并将System.Net.HttpWebResponse的响应流传递给它。不幸的是,这引发了一个System.ArgumentException告诉我 无法对不支持搜索的[a]流进行操作 查看参考源代码,发现System.IO.Packaging.Package使用System.IO.Packaging.ZipPackage作为其唯一的实现,而该实现又使用内部ZipArchive类。果然,如果stream.CanSeek为fal
System.Net.HttpWebResponse
的响应流传递给它。不幸的是,这引发了一个System.ArgumentException
告诉我
无法对不支持搜索的[a]流进行操作
查看参考源代码,发现System.IO.Packaging.Package
使用System.IO.Packaging.ZipPackage
作为其唯一的实现,而该实现又使用内部ZipArchive
类。果然,如果stream.CanSeek
为false
,则该方法会在第588行引发此异常,这是myHttpWebResponse
的响应流的情况
但是,有一个神奇的streaming
参数,它显然总是false
,并从包中传递。Open()
方法一直传递到validateDoAccessStreamingCombinations()
所以我的问题是:有没有任何方法可以使用
Package.Open(Stream)
从不可查找的流动态构建Package
?或者我必须将流内容缓存在某个地方,例如在内存流中?(我真的不想这么做,因为一旦打开包流,我就对它不感兴趣。)嗯,没关系。streaming
参数仅用于动态编写System.IO.Packaging.Package
。从这里开始,有一堆“写时间streaimgapi”方法。还有一个方法,它只在我尝试编写包时引发异常
因此,是的,我必须将来自HttpWebResponse
的不可查找流缓存在MemoryStream
或临时文件中。不要在飞行中为我打开行李:(