Ich habe etwas sehr ähnliches geschrieben. Ich habe den FileSystemWatcher verwendet, um Benachrichtigungen über Änderungen zu erhalten. Ich benutzte dann einen FileStream, um die Daten zu lesen (meine letzte Position in der Datei zu verfolgen und danach zu suchen, bevor die neuen Daten gelesen wurden). Dann füge ich die gelesenen Daten zu einem Puffer hinzu, der automatisch komplette Linien extrahiert und dann dann zur UI ausgibt.
Hinweis: „this.MoreData (..) ist ein Ereignis, der Zuhörer, von denen den oben genannten Puffer ergänzt und übernimmt die komplette Linie Extraktion
. Hinweis: Wie bereits erwähnt, wird dies nur funktionieren, wenn die Änderungen immer zu der Datei hinzugefügt werden.Jede Löschung führt zu Problemen.
Hoffe, das hilft.
public void File_Changed(object source, FileSystemEventArgs e)
{
lock (this)
{
if (!this.bPaused)
{
bool bMoreData = false;
// Read from current seek position to end of file
byte[] bytesRead = new byte[this.iMaxBytes];
FileStream fs = new FileStream(this.strFilename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
if (0 == this.iPreviousSeekPos)
{
if (this.bReadFromStart)
{
if (null != this.BeginReadStart)
{
this.BeginReadStart(null, null);
}
this.bReadingFromStart = true;
}
else
{
if (fs.Length > this.iMaxBytes)
{
this.iPreviousSeekPos = fs.Length - this.iMaxBytes;
}
}
}
this.iPreviousSeekPos = (int)fs.Seek(this.iPreviousSeekPos, SeekOrigin.Begin);
int iNumBytes = fs.Read(bytesRead, 0, this.iMaxBytes);
this.iPreviousSeekPos += iNumBytes;
// If we haven't read all the data, then raise another event
if (this.iPreviousSeekPos < fs.Length)
{
bMoreData = true;
}
fs.Close();
string strData = this.encoding.GetString(bytesRead);
this.MoreData(this, strData);
if (bMoreData)
{
File_Changed(null, null);
}
else
{
if (this.bReadingFromStart)
{
this.bReadingFromStart = false;
if (null != this.EndReadStart)
{
this.EndReadStart(null, null);
}
}
}
}
}
Warum der Downvote? – RichS