如果程序包托管在Web服务器(URL)上,则System.IO.Packaging.PackagePart.GetStream()不起作用

时间:2014-08-01 07:59:56

标签: c# .net system.io.packaging

我有一个托管在Web服务器(URL)上的软件包(System.IO.Packaging.Package),如果我在Web浏览器中提供软件包URL,我可以下载软件包。

我的要求是从包中提取单个文件(与文件关联的流)而不下载整个包。

System.IO.Packaging具有允许操作包的类。如果软件包位于SMB共享上,则这些类可以正常工作,但如果软件包托管在Web服务器上,则无法提取文件。

当我调用PackagePart.GetStream()方法时失败,给出一个异常,说明该流是只写的,因此无法执行读操作。我尝试使用Package.Open()和PackagePart.GetStream()方法的重载来传递读/写权限,但它仍然不起作用。

如果我正确理解了堆栈跟踪,那么MS.Internal.IO.Zip.ZipIOLocalFileBlock._blockManager中的流实例就没有从PackagePart.GetStream()调用传播的权限。

这是一个错误吗?我做错什么了吗?有解决方法吗?我现在已经挣扎了两个多星期才找到解决这个问题的方法,并没有关于这些类的使用的充分文档。

PS:我已经尝试了一些流行的Zip库(SharpZipLib,DontNetZip和.NET 4.5 ZipArchive类),但它们都没有实现我的要求。

谢谢。

0 个答案:

没有答案