У меня есть метод, который содержит 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)
{
}
}
}
Установите точку останова на OnChanged, конечно. Код очень неразумный, вы * не * хотите использовать FSW для измерения прогресса копирования, как это. Вы получаете прогресс от [CopyFileEx] (http://msdn.microsoft.com/en-us/magazine/cc163851.aspx). Надеюсь, ваш диск D: это не оптический привод, который не может работать. –
@HansPassant FileSystemWatcher предназначен для непрерывной проверки обновлений в текстовом файле – Adi
Вы читаете весь файл * дважды * для каждого уведомления об изменении. Как написано, это убийственно дорого, и вероятность того, что вы потеряете события смены, очень высока. Всегда используйте событие Error. Продвиньтесь, открыв файл с помощью FileShare.ReadWrite и не закрывая его, чтобы вам не пришлось постоянно его читать с самого начала. Имейте в виду, что вы не можете надежно обнаружить конец файла во время записи файла, последняя строка, скорее всего, будет частично написанной строкой текста. Вы считаете, что в качестве строки следующая запись снова рассчитывает ее как строку. –