Уникальная информация в каждом файле или папке NTFS
Я работаю над проектом, где мне нужно заполнить некоторые файлы с сервера и показать их в веб-браузере пользователю. Где пользователю будет разрешено выполнять базовую операцию CRUD над файлом. Проблема в том, что я не могу назначить имя файла / папки как unique id
что мне нужно в случае, если пользователь удаляет / переименовывает файл, я должен быть в состоянии идентифицировать файл позже.
У меня вопрос, есть ли что-нибудь уникальное в любом файле / папке в NTFS
что в них уникального и что можно использовать? и как эта информация может быть доступна с помощью .NET c#
,
Наткнулся на структуру BY_HANDLE_FILE_INFORMATION, но, вероятно, мне нужно pinvoke
,
ОБНОВЛЕНИЕ 1 - попытался посмотреть на возможность использования nFileIndexHigh и nFileIndexLow, но мне понадобится сделать pinvoke, а также этот метод нельзя использовать с одной ссылкой на папки, когда они упоминают папки. Уникальный идентификатор папки говорит мне, что это невозможно.
2 ответа
Несмотря на то, что кажется, что вы не хотите P/Invoke, другой подход может заключаться в использовании Windows Shell API. Этот API имеет концепцию PIDL, которая идентифицирует папку (или "похожий" элемент) в пространстве имен оболочки. PIDL не изменяется, даже если пользователь переименовывает папку. Недостатком является то, что Shell API предоставляет то, что вы видите в проводнике Windows, например Desktop
находится в корне иерархии, хотя физически это подпапка где-то на диске.
Я думаю, что структура FILE_INTERNAL_INFORMATION, используемая для запроса 8-байтового ссылочного номера файла файловой системы, - это то, что вам нужно. IndexNumber
это число, которое однозначно идентифицирует файл. Вы должны использовать P/invoke для запроса этой информации.