Я предполагаю, что формат файла не находится под вашим контролем (в противном случае сгенерируйте UUID и сохраните его там).
объектный файл удостоверения личности
NTFS поддерживает объект ID на уровне файлов см FSCTL_CREATE_OR_GET_OBJECT_ID. Я не использовал их, чтобы рекомендовать их, но это кажется многообещающим предметом для изучения.
Как и в случае с альтернативными потоками данных (см. Ниже), они могут потеряться при копировании на не-NTFS-среду («обычные» карты памяти, компакт-диски, DVD-диски, флэш-карты, возможно даже некоторые USB-диски ...) , Кроме того, некоторые приложения могут испортиться, когда они восстанавливают файл при сохранении.
Distributed Link Tracking Service
Distributed Link Tracking Service использует объект файла идентификаторов, ну, отслеживание ссылок на файлы, и их ремонт, когда файл будет перемещен.
Служба отслеживания распределенных ссылок AFAIK требует наличия контроллера домена для сервера. Опять же, у меня нет практического опыта в этом.
На NTFS вы также можете создать и сохранить UUID в alternate data stream.
Предостережения:
- Доступно только на NTFS, не будет «выжить» на других файловых системах
- Одна белая бумага «будущее NTFS» считается убивая их, но мне кажется, мысль там были некоторые другие функции, которые могут вам помочь (к сожалению, я не смог их выкопать)
- Я бы не хотел создавать это для тысяч файлов неизвестного происхождения и цели. Хотя они «просто работают» на уровне файловой системы, некоторые приложения могут испортиться.
Некоторые форматы документов, такие как Office, позволяют custom document properties.
Это, очевидно, ограниченное, но аналогичные механизмы могут быть дополнены другими типами файлов. (Например, множество форматов изображений позволит добавление/перезаписи «пользовательские» куски, которые должны быть проигнорированы читателями)
FileFromID против IDFromFile
решения Alll кроме DLTS только позволяют IDFromFile
поиск, т.е. местонахождение файла, который имеет перемещен (или удален), требует поиска всех потенциальных дисков.
Для DLTS, если нет прямого метода API, вы можете сохранить ярлык с поддержкой DLTS в папке приложения, а ~~ надеяться, что ~~ ожидает, что служба восстановит ярлык при перемещении файла ,
Путь к файлу не является уникальным? –
Если вы объясните, какой «уникальный идентификатор» вы имеете в виду, то можно ответить ... До сих пор выглядит хорошим кандидатом на закрытие. –
Мне нужен постоянный uid, перемещение файла изменит путь, конечно. –