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

相关问题