FindFirstFile и переходы - PullRequest
       2

FindFirstFile и переходы

6 голосов
/ 23 июля 2011

Я использую это, чтобы получить содержимое каталога foo : FindFirstFile(L"foo\\*", &findData).Это прекрасно работает, когда foo является обычным каталогом.Однако, когда foo является соединением, указывающим на другой каталог (созданный с помощью mklink /j foo C:\gah), FindFirstFile завершается ошибкой.

Документы имеют следующее: «Если путь указывает на символическую ссылку, буфер WIN32_FIND_DATA содержит информацию о символической ссылке, а не о цели».Но когда я запускаю его в отладчике, я просто получаю INVALID_HANDLE_VALUE и findData остается нетронутым.

Итак, как мне обойти это?

1 Ответ

9 голосов
/ 23 июля 2011

У Раймонда Чена есть ответ для вас.

Такие функции, как GetFileAttributes и FindFirstFile, когда их просят предоставить информацию о символической ссылке, возвращают информацию оссылка сама, а не ссылка назначения.Если вы используете функцию FindFirstFile, вы можете сказать, что у вас есть символическая ссылка, потому что для атрибутов файла будет установлен флаг FILE_ATTRIBUTES_REPARSE_POINT, а член dwReserved0 будет содержать специальное значение IO_REPARSE_TAG_SYMLINK.

Хорошо, отлично, теперь я знаю, что у меня есть символическая ссылка, но что, если я хочу получить информацию о цели ссылки?Например, я хочу узнать размер цели ссылки, время ее последнего изменения и имя.

Для этого вы открываете символическую ссылку.Менеджер ввода / вывода разыменовывает символическую ссылку и дает вам указатель на место назначения ссылки.Затем вы можете вызвать такие функции, как GetFileSize, GetFileInformationByHandleEx или GetFinalPathNameByHandle, чтобы получить информацию о целевой символьной ссылке.

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