Проверьте, имеет ли приложение доступ для чтения к папке (FindFirstFile возвращает «Доступ запрещен», но _access успешно) - PullRequest
0 голосов
/ 24 сентября 2018

Я перечисляю содержимое папки с FindFirstFile / FindNextFile.Проблема, с которой я сталкиваюсь, заключается в том, что некоторые из найденных подпапок не могут быть перечислены по очереди, FindFirstFile возвращает «Доступ запрещен».Поэтому я хочу проверить это условие и не включать такие подпапки в список.Я нашел два возможных решения: проверить путь с помощью _access() или подробно проверить фактические разрешения с помощью AccessCheck, но последнее, как говорят, имеет большой вес, в отличие от _access(), потому что вам нужно открыть изакройте ручку.Проблема в том, что _access всегда успешно выполняется для всех папок, которые я не могу перечислить с FindFirstFile.Есть ли какое-либо иное решение, кроме AccessCheck?

Еще один непосредственный подход заключается в том, чтобы сразу позвонить FindFirstFile, но это, опять же, кажется пустой тратой (и мне сначала нужно будет определить,элемент представляет собой папку, поэтому еще больше дополнительной работы).

1 Ответ

0 голосов
/ 24 сентября 2018

Комментарии к моему вопросу полезны и обеспечивают самое простое решение проблемы, как было сформулировано, но в ходе дальнейших исследований я обнаружил, что папки, которые я не могу перечислить, являются ссылками, у них установлен бит атрибута FILE_ATTRIBUTE_REPARSE_POINT в их WIN32_FIND_DATA::dwAttributes поле.Проверка этого была достаточна для того, чтобы я реализовал специальную обработку для этих элементов.

...