我正在使用以下代码观看文件:
[..]
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行”?
请注意,该文件可能非常大,因此将其内容放在内存中并使用新版本进行差异不是一种选择。同样地,存储最后读取行的值和从中开始的计数也是不可能的,因为它会强制我每次都读取整个文件,并且可能存在具有相同值的行。
任何帮助都非常感激。
答案 0 :(得分:6)
如果是日志,请始终追加,您可以保留文件大小并随时更改:
using (FileStream fs = new FileStream("t.log", FileAccess.Read))
{
fs.Seek(previousSize, SeekOrigin.Begin);
//read, display, ...
previousSize = fs.Length;
}
答案 1 :(得分:0)
我看到的唯一用例就是当你只添加行时。然后只需存储行数。