2

System.IO.Packaging.PackageWeb サーバーから受け取った を解凍しようとしています。つまり、私はSystem.IO.Packaging.Package.Open(Stream)メソッドを使用し、それを a の応答ストリームに渡していSystem.Net.HttpWebResponseます。残念ながら、これによりSystem.ArgumentException

シークをサポートしていない [a] ストリームでは操作できません。

参照ソースを見ると、内部クラスを使用する唯一の実装としてSystem.IO.Packaging.Package使用されていることがわかります。そして案の定、 my からの応答ストリームの場合、メソッドは588 行目でこの例外を発生させます。System.IO.Packaging.ZipPackageZipArchiveValidateModeAccessStreamStreamingCombinations()stream.CanSeekfalseHttpWebResponse

streamingただし、どうやら常にであり、メソッドfalseから までずっと渡される魔法のパラメータがあります。Package.Open()ValidateModeAccessStreamStreamingCombinations()

だからここに私の質問があります:シーク不可能なストリームからオンザフライでPackage.Open(Stream)構築するために使用する方法はありますか? Packageまたは、ストリームのコンテンツをどこかにキャッシュする必要がありMemoryStreamますか? (アンパックしたパッケージストリームには興味がないので、本当にやりたくありません。)

4

1 に答える 1

1

ええ、気にしないでください。このstreamingパラメーターは、オンザフライで書き込むことのみを目的としています954 行System.IO.Packaging.Package目以降には、一連の「書き込み時ストリーム API」メソッドがあります。パッケージを書き込もうとしたときにのみ例外を発生させるメソッドもあります。ThrowIfInStreamingCreation()

そうです、シーク不可のストリームを一時ファイルまたは一時ファイルにキャッシュするHttpWebResponse必要MemoryStreamがあります。オンザフライで解凍する必要はありません:(

于 2015-05-04T16:55:31.350 に答える