VB.NET質問スレ (Part10)
at TECH
685:デフォルトの名無しさん
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とかできない(意味無い)。
次ページ続きを表示1を表示最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4973日前に更新/240 KB
担当:undef