Есть ли способ определить, что файл был изменен и перемещен? - PullRequest
1 голос
/ 30 апреля 2010

Я пишу приложение, которое каталогизирует файлы и приписывает их дополнительным метаданным через отдельные файлы "side-car". Если изменения в файлах производятся с помощью моей программы, то она может синхронизировать все между ними и соответствующими файлами метаданных. Тем не менее, я пытаюсь найти способ справиться с тем, как кто-то изменяет файлы вручную, пока моя программа не запущена.

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

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

Так есть ли какой-то другой уникальный идентификатор файла, который я могу отслеживать, который остается с ним даже после того, как он переименован, перемещен или изменен?

1 Ответ

1 голос
/ 30 апреля 2010

Не существует уникального идентификатора для файла. Лучшее, что вы можете использовать, - это эвристический метод сравнения различий. Если разница между удаленным и добавленным файлом невелика, возможно, это была операция изменения + перемещения. Или, может быть, нет.

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

...