2016-06-27 15 views
0

私はstreamは基本的にMemoryStreamで次のコードパッケージが基本ストリームを閉じないのはなぜですか?

Package package = Package.Open(stream, fileMode, fileAccess); 

で開かPackageを使用しています。今私がpackage.Close()と呼ぶと、メモリストリームはまだ開いています。

私は、ファイルのパスを入力してパッケージを閉じる場所に、オーバーロードされたメソッドを使用すると、ファイルハンドルが破棄されます。私がStreamReaderを開いてそれを閉じると、基になるストリームが破棄されます。

Packageクラスは、基本ストリームを破棄しないのはなぜですか?

+0

まだ開いていると言うと、 'CanRead' /' CanSeek'/'CanWrite'のプロパティは引き続き'MemoryStream'バッファ? –

+0

@FedericoDipuma私は基本的にストリームを閉じていくつかの作業(ファイルシステムに書き戻す)を行うのを待つ、基本クラスとしてメモリストリームを持つ特殊なクラスを持っています。ストリームが決して閉じられない場合、これは起こりません。 – Yggdrasil

答えて

0

ストリームを作成しました。ストリームを開いたときに、ストリームを使用できるものを作成しました。しかし、ストリームはまだそこにあります。だから、ストリームを閉じて処分する必要があります。

+0

公正であること:ストリームを使用するいくつかのクラスは、デフォルトでストリームを閉じます(例えば、読者とライター)。ライターが終了した後にストリームを保持したい場合は、時には奇妙な予防措置を取る必要があります。 –

+0

同じことが 'StreamReader'やストリームのみを使用する他のラッパーにも当てはまります。しかし、彼らはストリームを閉じます。 – Yggdrasil

+0

真実ですが、全体としてはそれを閉じないような響きです...だから – BugFinder

関連する問題