Уникальная идентификация файлов / папок в NTFS даже после перемещения / переименования - PullRequest
3 голосов
/ 19 февраля 2011

Я не нашел программу резервного копирования (синхронизации), которая делает то, что я хочу, поэтому я думаю о том, чтобы написать свою собственную.

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

Проблема заключается в том, что если я переместить или переименовать большую папку, он сначала получаетскопированы в место назначения, даже если оно в принципе уже существует, просто имеет другой путь.Затем папка, которая уже была там, впоследствии удаляется.

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

Есть ли способ программно идентифицировать такие перемещенные / переименованные файлы или папки, т. Е. По идентификатору NTFS, физическому расположению на носителе или чему-то еще?Существуют ли решения этой проблемы?

Мне нет дела до языка программирования, но приветствуются подсказки для этого на Python, C ++, C #, Java или Prolog.

Ответы [ 2 ]

6 голосов
/ 19 февраля 2011

Вы знакомы с идентификаторами объектов? Это может быть то, что вы ищете: http://msdn.microsoft.com/en-us/library/aa363997.aspx

Вы также можете использовать идентификаторы файлов. Вы можете получить это в FileId поле FILE_ID_BOTH_DIR_INFO, которое вы получите, позвонив по GetFileInformationByHandleEx или nFileIndexLow и nFileIndexHigh в BY_HANDLE_FILE_INFORMATION Вы получите по телефону GetFileInformationByHandle.

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

0 голосов
/ 19 февраля 2011

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

...