Доброго времени суток.
Суть вопроса: нужно мониторить изменения в файле, а точнее то, когда в него добавляются новые строки.
Понятно, что нужно использовать FileSystemWatch, StreamReader, но суть в том, что при сохранении файла почему-то дважды вызывается Changed событие у FileSystemWatch, а чтение из файла почему-то дает сначала пустую строку, а потом новые строки из файла.
Код:
static void Main()
{
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory);
var file = Path.Combine(path, "1.txt");
var fsw = new FileSystemWatcher(path, "1.txt");
fsw.Changed += Sfw_Changed;
fsw.NotifyFilter = NotifyFilters.LastWrite;
fsw.EnableRaisingEvents = true;
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); //открываем для чтения, но не блокируем файл.
sr = new StreamReader(fs);
sr.BaseStream.Seek(0, SeekOrigin.End); //Прыгаем в конец, старые данные нам не интересны.
AutoResetEvent autoResetEvent = new AutoResetEvent(false);
autoResetEvent.WaitOne();
}
private static void Sfw_Changed(object sender, FileSystemEventArgs e)
{
if (e.ChangeType == WatcherChangeTypes.Changed)
{
Console.WriteLine(e.ChangeType);
while (!sr.EndOfStream)
{
Console.WriteLine(sr.ReadLine());
}
}
}
Что обычно вижу в консоли: (первая строка пустая, дальше - новые данные из файла)
Главные вопросы:
1) Почему 2 раза вызывается событие, если я сохраняю файл 1 раз;
2) От куда он берет пустую строку?