24

StreamWriter.NET 4.5の既存のファイルにテキストを追加するためにaを使用しているときに、何か面白いことに遭遇しましたFileStream(古いフレームワークは試していません)。私は2つの方法を試しました。1つは機能し、もう1つは機能しませんでした。両者の違いは何だろうと思います。

どちらのメソッドにも、上部に次のコードが含まれていました

if (!File.Exists(filepath))
    using (File.Create(filepath));

using私は、個人的な経験から、アプリケーションがファイルを完全に閉じることを保証するための最良の方法であることがわかったので、ステートメントに作成しました。

非動作方法:

using (FileStream f = new FileStream(filepath, FileMode.Append,FileAccess.Write))
    (new StreamWriter(f)).WriteLine("somestring");

この方法では、ファイルに何も追加されません。

作業方法:

using (FileStream f = new FileStream(filepath, FileMode.Append,FileAccess.Write))
    using (StreamWriter s = new StreamWriter(f))
        s.WriteLine("somestring");

何を検索すればよいかよくわからないまま、少しグーグルを実行しましたが、有益な情報は見つかりませんでした。StreamWriterでは、 (匿名ではない?名前が付けられた?)が機能する場所で匿名が失敗するのはなぜStreamWriterですか?

4

2 に答える 2

21

ストリームをフラッシュしなかったようです。

http://msdn.microsoft.com/en-us/library/system.io.stream.flush.aspx

StreamWriterは、最終的な宛先(この場合はファイル)に書き込む前にバッファーに書き込むように見えます。AutoFlushプロパティを設定して、明示的にフラッシュする必要がない場合もあります。

http://msdn.microsoft.com/en-us/library/system.io.streamwriter.autoflush.aspx

質問に答えるために、「using」ブロックを使用すると、StreamWriterでdisposeが呼び出され、StreamWriterはFlushを呼び出す必要があります。

于 2013-02-02T01:34:12.773 に答える