| 

.NET C# Java Javascript Exception

2
Wie kann man mit .NET ein ständig wachsendes LogFile (txt) auslesen, sodass man immer die hinzugefügten Zeilen bekommt und das Ganze möglichst in Echtzeit?
Das Logfile soll aber nicht verändert werden.
02.07.2011
scm 23 3
2 Antworten
4
Hallo,

mit dem FileSystemWatcher kannst du dich über Änderungen an der Datei informieren lassen. Es ist also in Echtzeit im Sinne von ereignisgesteuert.

Die - soeben gebastelte - Klasse kannst du auch als Ausgangspunkt für weitere Entwicklungen verwenden:
using System;
using System.IO;

namespace ConsoleApplication1
{
public class LogReader
{
private readonly FileSystemWatcher _watcher;
private readonly StreamReader _reader;
//---------------------------------------------------------------------
public LogReader(string logFileFullName)
{
_watcher = new FileSystemWatcher();
_watcher.Path = Path.GetDirectoryName(logFileFullName);
_watcher.Filter = Path.GetFileName(logFileFullName);
_watcher.NotifyFilter = NotifyFilters.LastWrite;
_watcher.Changed += watcher_Changed;

FileStream fs = new FileStream(
logFileFullName,
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite);

_reader = new StreamReader(fs);
}
//---------------------------------------------------------------------
void watcher_Changed(object sender, FileSystemEventArgs e)
{
this.LogEntryAdded(_reader.ReadLine());
}
//---------------------------------------------------------------------
public void Start()
{
_watcher.EnableRaisingEvents = true;
}
//---------------------------------------------------------------------
public void Stop()
{
_watcher.EnableRaisingEvents = false;
}
//---------------------------------------------------------------------
public event Action<string> LogEntryAdded = delegate { };
}
}


Wenn aber das Programm das die Log-File beschreibt exklusiven Zugriff hat geht sowieso nix. D.h. das andere Programm muss auch kooperativ sein.

mfG Gü
02.07.2011
gfoidl 9,1k 3 5
0
Funktioniert perfekt.
Danke :-)
02.07.2011
scm 23 3

Stelle deine .net-Frage jetzt!