2009-07-29 80 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

我看到它可以工作的唯一用途是當你只需要添加行。然後只需存儲行數。