2009-07-29 83 views
4

文件的新行我看用下面的代码文件:充分利用与FileSystemWatcher的

 [..] 
     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

您可以添加一个时间戳字段到日志文件的每一行吗? – Jonathan 2009-07-29 08:52:32

回答

6

如果它是一个日志,总是附加,你可以保留的文件大小和变化:

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

我看到它可以工作的唯一用途是当你只需要添加行。然后只需存储行数。