Я понимаю, что FileSystemWatcher не предоставляет событие Move, вместо этого он будет генерировать отдельные события Delete и Create для того же файла. (FilesystemWatcher просматривает как исходную, так и целевую папки).
Однако как мы можем различать истинный перемещение файла и случайное создание файла, имеющего то же имя, что и недавно удаленный файл?
Некоторое свойство класса FileSystemEventArgs, такое как "AssociatedDeleteFile", которому назначен удаленный путь к файлу, если он является результатом перемещения, или NULL в противном случае будет отличным. Но, конечно, этого не существует.
Я также понимаю, что FileSystemWatcher работает на базовом уровне файловой системы, поэтому концепция "Move" может иметь смысл только для приложений более высокого уровня. Но если это так, то какой алгоритм люди рекомендуют обрабатывать эту ситуацию в моем приложении?
Обновление на основе обратной связи:
Класс FileSystemWatcher, похоже, отображает перемещение файла как просто 2 различных события, удаление исходного файла, а затем Создать в новом месте.
К сожалению, между этими событиями нет "ссылки", поэтому неясно, как различать перемещение файла и нормальное удаление или создание. На уровне ОС движение обрабатывается специально, вы можете перемещаться, скажем, 1 ГБ файл почти мгновенно.
Несколько ответов предложили использовать хэш на файлах, чтобы надежно идентифицировать их между событиями, и я буду использовать этот подход. Но если кто-то знает, как проще определить движение, пожалуйста, оставьте ответ.