2009-05-28 7 views
0

に私はこのようになりますプログラムを持っている:ロギングとフラッシュは、.NET

public partial class It 
{ 
    static StreamWriter logging 
     = new StreamWriter(new FileStream(@"C:\log",FileMode.Create)); 

    void someFn() 
    { 
     logging.WriteLine("foo"); 
     logging.Flush(); 

     /// killed here in debugger with Shift+F5 
    } 
} 

ファイルは「foo」で終わっていないと、フラッシュが起きていないようで、それという問題。私はここで何かを虐待していますか?私は "私が戻ったときにビットがファイルにある"必要があります、そのようなことが存在するのですか?

理想的には、その時点で壊れた場合、別のプロセスが最後の行が書き込まれていることを確認できます。

+0

私はそれを再現することはできません。あなたのコードを実行し、logging.Flushの後にデバッガでブレークすると、ファイルに "foo"が含まれています。 –

+0

ファイル "fooで終わらない"と言う - それは何で終わりますか?ここに他のコードが含まれていますか? –

+0

"foo"の前に記録されたもので終わりです。ファイルの末尾がありません。そして、それは私が持っている正確なケースではありません。 – BCS

答えて

2

私はこの問題も覚えています。 は、私はあなたが、このコードを試してみてくださいすることができ

+0

Fud: – BCS

+0

いいえ、喜んでも私が必要なものを得られませんでした。(私が説明したものを正確に再現することはできませんが、それでも正しく機能していません) – BCS

+0

もう一つの試みはストリームを開いて閉じることです。静的な変数ではなくsomeFnを使用してください。これは間違いなく強制的にフラッシュされます。 – oscarkuo

1

あなたのコードは期待どおりに動作するはずです。ビルドモードがリリースに設定されているか、デバッガに表示されているソースコードと実際に実行されるコードとの間に相違があるかどうかは疑問です。プロジェクトがリリースモードでビルドされるように設定されている場合、オプティマイザがコードを移動している可能性があり、ソースコードが最適化されたコードで何が起こっているのかを正確に表すことができません。

+0

私はそれが私が得ている問題の種類ではないことを本当に願っています... – BCS

0

StreamWriterのではなく、根本的なのFileStreamをフラッシュし、私たちは結果をお知らせしなければならないと思う:

class Program 
{ 
    static void Main(string[] args) 
    { 
     StreamWriter foo = new StreamWriter(new FileStream(@"C:\foo.txt", FileMode.Create)); 
     foo.WriteLine("foo"); 

     StreamWriter bar = new StreamWriter(new FileStream(@"C:\bar.txt", FileMode.Create)); 
     bar.WriteLine("bar"); 
     bar.Flush(); 
    } 
}