使用FileSystemWatcher从文件中获取新行

时间:2009-07-29 08:46:41

标签: c# logging filesystems

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

        [..]
        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!");
        }
        [..]

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

row 1
row 2
row 3
row 4

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

row 1
row 2
row 3
row 4
row 5
row 6

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

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

任何帮助都非常感激。

2 个答案:

答案 0 :(得分:6)

如果是日志,请始终追加,您可以保留文件大小并随时更改:

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

答案 1 :(得分:0)

我看到的唯一用例就是当你只添加行时。然后只需存储行数。