2011-07-09 10 views
0

私は次のような文を書く。StreamWriterがクローズドストリームにアクセスできないが、StreamReaderでアクセスできるのはなぜですか?

fileStream.Close(); 
reader.Close(); 
writer.Close(); 

reader.Close()文が正常に実行されます。しかし、私はエラー "閉じられたファイルを開くことはできません。"第三文writer.Close上の()

私が書く場合

fileStream.Close(); 
writer.Close(); 
reader.Close(); 

第二の文すなわちwriter.Close()自体は同じ例外をスローします。

誰もが知っていますか?

+3

私の推測では、ライターはストリームに内部バッファをフラッシュしようとしている可能性がありますが、読者は明らかにそれを行う必要はありません。 – hammar

+0

「解決策」として、最後にストリームを閉じるだけです。しかし、 'using(){}'ブロックを使う方が良いでしょう。 –

答えて

4

ライターは、基本となるストリームを閉じる前にflush()を呼び出すからだと思います。私はあなたのコードが何に似ていることを推測する必要がありますするつもりです

2

FileStream fileStream = new FileStream(...); 
StreamWriter writer = new StreamWriter(fileStream); 
... 

は近くないFILESTREAMを行い、ストリームライターは今ストリーム「を所有しています」。これを閉じると、ファイルストリームも閉じます。

+0

もちろん、ブロックを使用して_both_をラップします。 Stream.Disposeはダミーですが、それが最後であればOKです。 –

+0

@Henk - メソッドの最後の中括弧である可能性があります。使用しないでください。これは、最初の場所にClose()が存在する理由です。プログラミングパターンは正当なものですが、ちょっと怪しいです。 –

関連する問題