Различать события Changed и Created в FileSystemWatcher?

Я использую FileSystemWatcher для мониторинга определенного каталога, и мне нужно вызвать одно событие, когда кто-то сохраняет изменения в файл, а другое — когда он создает или перемещает файл.

Мониторинг перемещенных файлов отлично работает с использованием комбинации событий Deleted и Created. И когда кто-то сохраняет изменения в файле, событие Changed действительно возникает. Однако, когда они перемещают файл, также возникает событие Changed, и это мешает обработке, которую я получил для событий Created и Deleted.

Итак, в основном я хочу вызвать событие Changed только тогда, когда пользователь сохраняет изменения в файл, а не когда пользователь перемещает или создает файл. Я попытался использовать свойство ChangeType, чтобы проверить, действительно ли это было событие Changed или событие Created, но, к моему удивлению, ChangeType Changed поднималось для события Change даже при перемещении или создании файла, а не ChangeType Created (которое предположительно должен быть одним из типов).

Поэтому я не знаю, как проверить, действительно ли событие Change вызвано редактированием файла, а не созданием или перемещением файла...

Любые идеи?


person Anders    schedule 09.08.2011    source источник


Ответы (1)


Это нормальное поведение, когда вы применяете некоторые из NotificationFilter, такие как NotifyFilter. Attributes и NotifyFilter.LastAccess, он даже уведомит Changed дважды, если оба фильтра были применены при перемещении файла «Удалено — Создано — Изменено — Изменено», Итак:

  • Просто не добавляйте ненужные фильтры уведомлений; Если вы просто удалите NotifyFilter. Attributes и NotifyFilter.LastAccess, вы не получите событие Changed при перемещении файла, только Deleted, затем Created.
  • Если вы хотите придерживаться фильтров уведомлений, которые вы уже используете, здесь есть еще один совет, который позволит вам создать грязное решение, это тот факт, что когда файл перемещен, последовательность уведомлений будет Deleted, Created, затем Changed, они всегда будут в этом порядке..
person Jalal Said    schedule 09.08.2011
comment
Спасибо, хорошие выводы. Просто использование NofityFilter не сработало, потому что папка вызывает измененное событие до того, как файлы вызывают удаленные и созданные события, но мне удалось исправить это, используя комбинацию двух ваших советов и таймера. Как вы сказали, грязно, но работает :-) - person Anders; 10.08.2011