我有一个托管在网络服务器 (URL) 上的包 (System.IO.Packaging.Package),如果我在网络浏览器中提供包 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 类),它们都无法实现我的要求。
谢谢你。