使用FileSystemWatcher从文件中获取新行

pis*_*hio 4 c# filesystems logging

我正在使用以下代码观看文件:

        [..]
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = @"C:\";
        watcher.Filter = "t.log";
        watcher.Changed += new FileSystemEventHandler(watcher_Changed);
        watcher.EnableRaisingEvents = true;

        private static void watcher_Changed(object sender, FileSystemEventArgs e)
        {
            Console.WriteLine("Changed!");
        }
        [..]
Run Code Online (Sandbox Code Playgroud)

这有效.现在,假设文件t.log的内容是:

row 1
row 2
row 3
row 4
Run Code Online (Sandbox Code Playgroud)

当我添加到文件(并保存)几行时,文件变为:

row 1
row 2
row 3
row 4
row 5
row 6
Run Code Online (Sandbox Code Playgroud)

如何检索添加的行是"第5行"和"第6行"?

请注意,文件可能非常大,因此将其内容放在内存中并使用新版本进行差异不是一种选择.类似地,存储最后读取行的值和从中开始的计数也是不可能的,因为它会强制我每次都读取整个文件,并且可能存在具有相同值的行.

任何帮助真的很感激.

Gui*_*ume 7

如果它是一个日志,总是附加,你可以保持文件大小和更改:

using (FileStream fs = new FileStream("t.log", FileAccess.Read))
{
  fs.Seek(previousSize, SeekOrigin.Begin);
  //read, display, ...
  previousSize = fs.Length;
}
Run Code Online (Sandbox Code Playgroud)