2012-02-13 10 views
3

私はテキストファイルに書き込みたいですが、私は小さな問題があります。以下のコードを使用すると、一度だけ書き込みます。私はこのように書く時アプリケーションが終了するまでテキストファイルに書き込む方法

 StreamWriter fileWriter = new StreamWriter("test.txt"); 
     fileWriter.WriteLine(jointHead.Position.X);  
     fileWriter.Close(); 

 Debug.WriteLine(jointHead.Position.X); 

私はアプリケーションを閉じるまで、X位置を書き込みます。アプリケーションを閉じるまで、デバッグモードで書いているように、テキストファイルに書き込むにはどうすればいいですか?私がfileWrite.Close()を取る場所から取ると、プログラムは動かない。

は、それがすでに存在する場合は、StreamWriterのコンストラクタがあるtest.txt削除すること...

+0

適切な行を次の行に変更します。StreamWriter fileWriter = new StreamWriter( "test.txt"、true);ファイルに追加します。 – FooLman

+0

アプリケーションが終了してディスクに書き込まない限り、テキストを追加することはあなたの目標ですか? – Oybek

答えて

1

は、ファイルの最後に追加されるように書かれたテキストを許可します

StreamWriter fileWriter = new StreamWriter("test.txt", true); 
     fileWriter.WriteLine(jointHead.Position.X);  
     fileWriter.Close(); 

この

を試してみてください。 あなたは毎回最初からあなたの文章を書いています。

編集

は、アプリケーションの起動時にファイルをクリアしたい場合は、単に次の手順を実行します。

StreamWriter fileWriter = new StreamWriter("test.txt"); 
      fileWriter.Write(""); 
      fileWriter.Close(); 
+0

ありがとう、これはうまくいったが、それは書き込みをしません。アプリケーションを起動するたびに上書きする方法はありますか? – Samet

+0

ファイルのクリア方法を追加しました。ファイルをnull文字で上書きして保存します。 – ChrisBD

+0

私は理解できませんでした。私は同時に両方を使用しますか?つまり、EDIT verisonはアプリケーションの最初にあり、何も保存しません。コードの最初の部分は、私が保存したい場所にありますか? – Samet

0

、ありがとうございました。コードの一部が実行されるたびに、以前作成したtext.txtファイルが削除されます。その代わり、代わりにそれを置き換えるの既存のtest.txtファイルに追加し、追加のブール値をとるoverload for the constructor of streamwriterを使用します。

StreamWriter fileWriter = new StreamWriter("test.txt", true); 

代わりに、あなたは、ファイルへのテキストを追加するFile.AppendAllLines方法で行くことができます。ファイルハンドルを閉じることについて心配する必要はなく、メソッド名自体は何が起きるかを明確に述べています。私にとっては、これは、オーバーロードされたストリームライターのコンストラクターほど不明瞭ではなく、より便利になります。

のいずれか、またはNLogのようなロギングフレームワークに進むことができます。その場合、NLogはすべてのファイル操作を処理して、そこに心配する必要はありません。また、あなたのファイルや、あなたが言及したように、デバッグ出力ウィンドウやイベントログなど、あなたが好きなものに書き込むようにNLogを設定することもできます。独自の実装よりも効率的です。

2

あなたの説明から、私が与えたコードスニペットはループしていると仮定しています。

ファイルをループの外側で開いたり閉じたりして移動すると、パフォーマンスが向上する可能性があります(これも問題を解決します)。

私は本当に毎回ファイルを開いたままにしておき、その後に追加フラグを指定します。

using (var fileWriter = new StreamWriter("test.txt", true)) 
{ 
    fileWriter.WriteLine(jointHead.Position.X); 
} 
0

ストリームライターを開いたままにします。しかし、WriteLineコールの後にFlushに電話してください。

また、行ごとに再作成する代わりに、追加するファイルを開くこともできます。


また、既存のログフレームワークを調べることもできます。既存のものは数多くあり、ホイールを再構築する必要はありません。個人的にはCommon.Loggingをバックエンドで使用したいと思います。

1

私はむしろでロガーのいくつかの並べ替えを使用することができことをお勧めしたいですストリングビルダ。

public class Logger { 
    private StringBuilder sb; 
    public Logger() { 
     sb = new StringBuilder(); 
    } 
    public Log(String log) { 
     sb.Append(log).AppendLine(); 
    } 
    public void Flush() { 
     File.WriteAllText(String.Format(@"D:\Logs\Log at {0:yyyy-MM-dd HH:mm:ss}.txt", DateTime.Now), sb.ToString()); 
     sb.Clear(); 
    } 
} 

このクラスははるかにエレガントで再利用可能なソリューションです。ターゲットログがそれほど大きくない場合は、実際には容認できます。

関連する問題