05/04/07 18:48:52
>>676
_FStreamのファイナライザが既に動いてCloseしてるからだろう。
URLリンク(www.ascii.co.jp)
が参考になるかも知れない。
そもそも、どうせ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とかできない(意味無い)。