- 685 名前:デフォルトの名無しさん mailto:sage [2005/04/07(木) 18:48:52 ]
- >>676
_FStreamのファイナライザが既に動いてCloseしてるからだろう。 ttp://www.ascii.co.jp/pb/msdn/article/a09_0003.html が参考になるかも知れない。 そもそも、どうせFileStreamがGCされた時にFileStreamのファイナライザが動いてフラッシュして閉じるので、 こちらでわざわざファイナライザを実装してCloseさせちゃいけない。 StreamWriterを使うと、デフォルトではStreamWriterがバッファリングしてストリームにすぐには書き込まないので、 書き込み内容が損失するわけだ。StreamWriterのファイナライザはストリームに操作しないから。 確実にはStreamWriter.Closeが喚ばれない場合の解決策としては、 StreamWriterを使わずWriteやWriteLineメソッドを自前で実装してFileStreamに直接書き込むとか、 StreamWriterを使うなら、AutoFlushをTrueにする手もある。 こういう場合はIDisposableを実装させてDisposeメソッドにファイル閉じる動作を書いて、 プログラマにDispose呼出を明示するのがベターなんだけどな。 VB2005でUsingステートメントもサポートされるようになるし。 ちなみに、StreamWriter.Closeは、自動でFlush動作もするので_WriteText.Flushは必要ないし、 基底のストリームも閉じてしまうのでその後の_FStream.Flushとかできない(意味無い)。
|

|