ゲームサーバーを制御するプログラムを作成しています。私が作っている機能の1つは、ライブサーバーのログファイルモニターです。テキストファイルを監視してテキストボックス内のコンテンツを継続的に出力する方法
実行時にサーバーによって更新されるログファイル(単純なテキストファイル)があります。
ログファイルを継続的に確認し、その内容をRichTextBoxで出力するにはどうすればよいですか?
私はこの単純な機能を試して、ログの内容を取得しました。 もちろん、行ごとにテキストを取得し、それをテキストボックスに出力します。 また、ループが実行されている限りプログラムをロックするので、役に立たないことがわかります。
しかし、ライブモニタリングをできるだけ簡単に解決するにはどうしたらいいですか?
* EDIT *
私はPrescotsソリューションを使用しています。素晴らしいもの。
現在、私はsstreamreaderを使ってファイルからテキストをテキストボックスに入れています。問題に遭遇したのは、イベントハンドラのguiコントロールにアクセスしようとするたびに、プログラムはエラーまたは警告なしで停止したことになります。
スレッドと関係があることがわかりました。私はこのようなことを解決:
private void OnChanged(object source, FileSystemEventArgs e)
{
if (monitorTextField.InvokeRequired)
{
monitorTextField.Invoke((MethodInvoker)delegate { OnChanged(source, e); });
}
else
{
StreamReader reader = new StreamReader("file.txt");
monitorTextField.Text = "";
monitorTextField.Text = reader.ReadToEnd();
reader.Close();
CursorDown();
}
}
今私の唯一の問題は、私はそれにアクセスすることはできませんので、それは「別のプロセスによって使用されている」年代からfile.txtをは、サーバーによって使用されていることです。私はそのプロセスを制御することはできません..多分私は運が切れている。
しかし、serevrが実行されている間にファイルをメモ帳で開くことができるので、何らかの形でそれを可能にする必要があります。おそらく私はファイルを更新して読むときに一時ファイルのコピーを作成することができます。 Dunno ...
タイマーを使用し、10秒または5秒ごとに確認してください... – SolidSnake