Уникальная информация в каждом файле или папке 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 для запроса этой информации.

Другие вопросы по тегам