Различить измененные и созданные события в FileSystemWatcher? - PullRequest
3 голосов
/ 10 августа 2011

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

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

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

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

Есть идеи?

1 Ответ

4 голосов
/ 10 августа 2011

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

  • Просто не добавляйте не релевантные фильтры уведомлений;Если вы просто удалите NotifyFilter. Attributes и NotifyFilter.LastAccess, вы не получите событие Changed при перемещении файла, только Deleted затем Created.
  • Если вы хотите придерживаться фильтров уведомлений, которые выуже используется, здесь есть другая подсказка , позволяющая сгенерировать решение dirty , это тот факт, что когда файл перемещен, последовательность уведомлений будет Deleted,Created затем Changed, они всегда будут в таком порядке ..
...