@LiptonOlolo

Как правильно следить за файлом?

Доброго времени суток.
Суть вопроса: нужно мониторить изменения в файле, а точнее то, когда в него добавляются новые строки.
Понятно, что нужно использовать 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());
		}
	}
}


Что обычно вижу в консоли: (первая строка пустая, дальше - новые данные из файла)
61d863dcf0ec6195775868.png

Главные вопросы:
1) Почему 2 раза вызывается событие, если я сохраняю файл 1 раз;
2) От куда он берет пустую строку?
  • Вопрос задан
  • 237 просмотров
Пригласить эксперта
Ответы на вопрос 1
@LiptonOlolo Автор вопроса
Решение:
1) Нужно после добавления всех новых строк в файле добавить новую строку (пустую);
2) Особенность Notepad++, через системный блокнот вызывается один раз;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы