我有一个托管在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类),但它们都没有实现我的要求。
谢谢。