VB.NET質問スレ (Part10) at TECH
[2ch|▼Menu]
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