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() 呼び出しから伝達された権限がありません。
これはバグですか?私は何か間違ったことをしましたか?回避策はありますか? 私はこの問題の解決策を得るために 2 週間以上苦労してきましたが、これらのクラスの使用法に関する十分なドキュメントはありません。
PS: いくつかの一般的な Zip ライブラリ (SharpZipLib、DontNetZip、および .NET 4.5 ZipArchive クラス) を既に試しましたが、それらはすべて私の要件を実現できませんでした。
ありがとうございました。