Как определить, был ли файл переименован? - PullRequest
0 голосов
/ 15 февраля 2019

В настоящее время я реализую свою собственную версию WatchService API в Java .

(Вы можете обратиться к этому примеру , чтобы понять, что делает файл WatchService .)

У меня есть реализованный код для следующие случаи:

  • Всякий раз, когда файл был создан внутри каталога или его подкаталога.
  • Всякий раз, когда файл был удален из каталога или его подкаталога.
  • Всякий раз, когда файл был изменен внутри каталога или его подкаталога. (на основе сравнения даты последнего изменения файлов)

Я сталкиваюсь с проблемой: всякий раз, когда файл переименовывается, я не понимаю, как отслеживатьit.

Эта ссылка содержит суть моего кода на высоком уровне: нажмите здесь

Всякий раз, когда файл был переименован, я получаю 2 результата

ФАЙЛ УДАЛЕН: {старое имя файла}
ФАЙЛ ДОБАВЛЕНО: {новое имя файла}

Но я хочу, чтобы фактический результат был:

ФАЙЛ ИЗМЕНЕН: ИЗ {old filename} TO {newимя_файла}

Как мне решить эту проблему?

Я предоставил псевдо-код (которого, я думаю, достаточно, чтобы понять проблему), Если требуетсяЯ могу также предоставить весь код:)

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Каждый раз, когда файл переименовывается, служба наблюдения генерирует события удаления + создания.Вы должны кое-как объединить эти два события как событие переименования.

Вы можете создать уникальный идентификатор и присвоить его файлу.Перейдите по этой ссылке .Всякий раз, когда вы видите событие создания в файле, и у него уже есть некоторый идентификатор, это означает, что оно переименовано, иначе это новое создание.Для вновь создаваемых файлов вы должны установить случайный уникальный идентификатор для отслеживания событий переименования.

0 голосов
/ 15 февраля 2019

JNotify поддерживает событие JNotify.FILE_RENAMED.Насколько я понимаю, это оболочка над собственным inotify API , и она может перехватывать переименование файлов на системном уровне (изменение имени без изменения дескриптора файла).

0 голосов
/ 15 февраля 2019

Вы можете хранить хэш для каждого файла.Когда вы обнаружите, что некоторые файлы удалены, а некоторые добавлены, сравнивают хэши и, если они совпадают, вы нашли переименованный / перемещенный файл.

...