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. В чем проблема? Почему она не получает отладки и не ударяет по braekpoint?

Вот что я пытался в соответствии с предложением от Hans Passant

 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/en-us/magazine/cc163851.aspx). Надеюсь, ваш диск D: это не оптический привод, который не может работать. –

+0

@HansPassant FileSystemWatcher предназначен для непрерывной проверки обновлений в текстовом файле – Adi

+1

Вы читаете весь файл * дважды * для каждого уведомления об изменении. Как написано, это убийственно дорого, и вероятность того, что вы потеряете события смены, очень высока. Всегда используйте событие Error. Продвиньтесь, открыв файл с помощью FileShare.ReadWrite и не закрывая его, чтобы вам не пришлось постоянно его читать с самого начала. Имейте в виду, что вы не можете надежно обнаружить конец файла во время записи файла, последняя строка, скорее всего, будет частично написанной строкой текста. Вы считаете, что в качестве строки следующая запись снова рассчитывает ее как строку. –

ответ

1

OnChanged не вызывается из RunWatcher. Вызов обработчиков событий обрабатывается в фоновом режиме во время выполнения. Итак, вам нужно установить контрольную точку в OnChanged.

+0

Я проверил настройку точки останова в OnChanged и изменил файл ..stil, я не вижу выход в консоли ... – Adi

+1

Вы построили все с отладочной информацией? Без этого вы не сможете установить точку останова. –

+0

Да, у меня есть решение в режиме отладки .. мой код правильный? – Adi

Смежные вопросы