0

我有一個包含FileSystemWatcher的方法來監視文本文件中的任何更改。這裏是我的方法。FileSystemWatcher在C#中調試時未達到斷點#

public static void RunWatcher() 
{ 
    FileSystemWatcher watcher = new FileSystemWatcher(); 
    watcher.Path = "D:\\CDR File"; 
    watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite 
       | NotifyFilters.FileName | NotifyFilters.DirectoryName; 
    watcher.Filter = "*.txt"; 
    watcher.Changed += new FileSystemEventHandler(OnChanged); 
    watcher.EnableRaisingEvents = true; 
} 

這裏是我的方法是從RunWatcher()方法調用..

private static void OnChanged(object source, FileSystemEventArgs e) 
{ 
    int totalLines = File.ReadLines(FileToCopy).Count(); 
    int newLinesCount = totalLines - ReadLinesCount; 
    File.ReadLines(FileToCopy).Skip(ReadLinesCount).Take(newLinesCount); 
    ReadLinesCount = totalLines; 

    Console.WriteLine("Hello World"); 
    Console.ReadLine(); 
} 

現在我已經叫RunWatcher()方法在應用程序的主要方法,把一個斷點內RunWatcher ()方法。但在調試時,我無法調用OnChanged ..問題是什麼?爲什麼它沒有被調試並擊中了布爾點?

這是我曾嘗試按照建議從漢斯帕桑特

 string FileToCopy = "D:\\BEML.txt"; 

     if (System.IO.File.Exists(FileToCopy) == true) 
     { 
      var fs = new FileStream(FileToCopy, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
      using (var reader = new StreamReader(fs)) 
      { 
       string line; 
       string rawcdr; 

       while ((line = reader.ReadLine()) != null) 
       { 
       } 
      } 
      } 
+0

當然在OnChanged上設置斷點。該代碼是非常不明智的,你不*想要使用FSW來測量像這樣的複製進度。您可以從[CopyFileEx](http://msdn.microsoft.com/zh-cn/magazine/cc163851.aspx)獲取進度。希望你的D:驅動器不是光驅,那是行不通的。 –

+0

@HansPassant FileSystemWatcher將持續檢查文本文件中的更新 – Adi

+1

您正在爲整個文件*兩次*讀取每個更改通知。正如所寫,這是非常昂貴的代價,你將失去變化事件的機率非常高。始終使用錯誤事件。通過使用FileShare.ReadWrite打開文件並不關閉它,讓您無需從頭開始一遍又一遍地閱讀它。請記住,在寫入文件時無法可靠地檢測文件結尾,最後一行很可能是文本的一部分。你會把它算作一條線,下一個寫道再次把它算作一條線。 –

回答

1

被調用onChanged不RunWatcher調用。事件處理程序的調用由運行時在後臺處理。 所以你需要在OnChanged中設置斷點。

+0

我檢查了OnChanged中的設置斷點並更改了文件..stil我沒有看到控制檯中的輸出... – Adi

+1

您是否使用調試信息構建了所有內容?沒有它,你將無法設置斷點。 –

+0

是的,我已經在調試模式下構建解決方案..我的代碼是否正確? – Adi

相關問題