При работе с WatchService я обнаружил, что если я удалю файл в просматриваемом каталоге, он запускает ENTRY_MODIFY
, за которым следует событие ENTRY_DELETE
.WatchService (Windows 7): при удалении файла он запускает как события ENTRY_MODIFY, так и ENTRY_DELETE?
Я понимаю, что технически файл может быть изменен перед удалением, но действительно ли ожидаемое поведение, при котором удаление файла вызывает ENTRY_MODIFY (которого, по-видимому, никто не заботится)?
Чтобы справиться с этим, я должен был добавить условие, чтобы проверить перед обжигом проходя по событию ENTRY_MODIFY:
if (eventKind == ENTRY_CREATE) {
listener.fileCreated(file);
} else if (eventKind == ENTRY_MODIFY) {
if (Files.exists(fullPath, LinkOption.NOFOLLOW_LINKS)) {
listener.fileChanged(file);
}
} else if (eventKind == ENTRY_DELETE) {
listener.fileDeleted(file);
}
Это есть лучший способ справиться с этой проблемой (функция)?
Я считаю, что это ожидается, и единственная строка кода, которую вы используете для обработки этого поведения, кажется простым решением для меня. – colti
@colti: У меня еще не было возможности протестировать Linux. Есть ли разница в поведении между Windows и Linux здесь? –
Возможно, но я не знаю точно. Реализация Linux использует inotify, если вы хотите прочитать об этом: http://man7.org/linux/man-pages/man7/inotify.7.html – colti