2015-01-31 2 views
0

Возможно ли получить доступ к файлу в проводнике Windows или MS-DOS с использованием только unique file ID? Я думал, что могу набрать что-то вроде {FILE_ID.VOLUME} ex. {2319237819273897.1} и откроется файл c: \ temp \ myfile.txt. Эта функция может быть полезна для доступа к файлу, который был перемещен в другой каталог, поскольку уникальный идентификатор файла остается неизменным после перемещения файла (даже несколько раз) и остается неизменным до тех пор, пока файл не будет удален.Открытый файл Windows с использованием уникального идентификатора

+0

MS-DOS вряд ли будет иметь отношение к вашему вопросу, если вы не используете двойную загрузку. Вы имели в виду интерфейс командной строки Windows? Кроме того, идентификаторы файлов, указанные в ссылке, необязательно остаются неизменными с точки зрения пользователя, поскольку многие приложения изменяют файл, удаляя его и создавая новый. С точки зрения пользователя, это тот же файл, но в отношении NTFS это другое. –

ответ

0

Это зависит от файловой системы. FAT не имеет идентификаторов файлов, но в низкоуровневом API Windows есть механизмы для открытия файла по его уникальному идентификатору. Это зависит от того, как обрабатывать этот идентификатор - FAT генерирует идентификатор динамически, в то время как NTFS работает с уникальными идентификаторами файлов в некотором роде (я не знаю деталей, хотя).

Идентификатор файла был добавлен в Windows для совместимости с некоторыми материалами Unix, и это не широко используемая функция. Я не знаю, можете ли вы использовать его через Win32 API (и так из Explorer).

Обновление: спасибо Harry Johnston в комментариях сейчас, я знаю, что вы можете открыть файл, используя OpenFileById Функция WinAPI, которая появилась в Vista.

+1

Из внутренних окон Windows: * «В дополнение к хранению идентификатора объекта, присвоенного файлу или каталогу [...], NTFS также сохраняет соответствие между идентификаторами объектов и номерами их файлов в индексе $ O [...]. Индекс сопоставляет записи по идентификатору объекта, что упрощает работу с файловой системой NTFS, которая позволяет быстро находить файл на основе его идентификатора. Эта функция позволяет приложениям ** использовать недокументированные функции API для открытия **, чтобы открыть файл или каталог, используя свой идентификатор объекта. " * Вы правы, можно получить доступ к файлу на томе NTFS с помощью его идентификатора, но он недоступен в Windows API. – IInspectable

+3

@IInpectable: это было правдой, но я считаю, что он устарел: [OpenFileById] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa365432 (v = vs.85)) .aspx) –

+0

@ Харри: Спасибо за исправление. Вы случайно не знаете, способен ли API работать с томами FAT, или это только NTFS/ReFS? В случае, если кому-то это интересно, 128-битный идентификатор файла можно получить с помощью вызова [GetFileInformationByHandleEx] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa364953.aspx), передающего ' Значение файла информации файла FileIdInfo' (Win 8, Server 2012). 64-битный идентификатор файла можно получить при вызове [GetFileInformationByHandle] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa364952.aspx). – IInspectable

Смежные вопросы