Estoy haciendo un programa que controla un servidor de juegos. Una de las funciones que estoy haciendo es un monitor de archivo de registro en vivo.Cómo supervisar el archivo de texto y salir continuamente del contenido en un cuadro de texto
Hay un archivo de registro (un archivo de texto simple) que se actualiza por el servidor mientras se ejecuta.
¿Cómo reviso continuamente el archivo de registro y lo visualizo en un RichTextBox?
Hice esta simple función simplemente intente obtener el contenido del registro. Obtendrá, por supuesto, el texto fila por fila y lo enviará a mi cuadro de texto. También bloqueará el programa mientras se ejecute el bucle, así que sé que es inútil.
public void ReadLog()
{
using (StreamReader reader = new StreamReader("server.log"))
{
String line;
// Read and display lines from the file until the end of the file is reached.
while ((line = reader.ReadLine()) != null)
{
monitorTextBox.AppendText(line + "\n");
CursorDown();
}
}
}
Pero, ¿cómo resolver el monitoreo en vivo lo más simple posible?
* * EDITAR
estoy usando solución Prescots. Buena cosa.
Por el momento estoy usando un sstreamreader para poner el texto del archivo en mi cuadro de texto. Me encontré con el problema es que, cuando intenté acceder a cualquiera de los controles gui en mi controlador de eventos, el programa simplemente se detuvo sin errores ni advertencias.
Descubrí que tiene que ver con el enhebrado. He resuelto que de esta manera:
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();
}
}
Ahora mi único problema es que el archivo.txt es utilizado por el servidor así que no puedo acceder a ella, ya que está "siendo utilizado por otro proceso". No puedo controlar ese proceso ... así que tal vez no tenga suerte.
Pero el archivo se puede abrir en el bloc de notas mientras se está ejecutando el serevr, por lo que de alguna manera debe ser posible. Tal vez pueda hacer una copia temporal del archivo cuando se actualice y lea la copia. No ...
usa el temporizador ... y revísalo cada 10 segundos o 5 segundos ... – SolidSnake