Мне нужен способ узнать, является ли каталог / папка доступным для чтения или записи.
Непосредственно для попытки открыть каталог с правами доступа на чтение / запись через CreateFile
API:
HANDLE tDir = CreateFile(L"D:\\testNew", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (INVALID_HANDLE_VALUE == tDir)
printf("Open directory failed with error %d \n", GetLastError());
else
printf("Readable. \n");
tDir = CreateFile(L"D:\\testNew", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (INVALID_HANDLE_VALUE == tDir)
printf("Open directory failed with error %d \n", GetLastError());
else
printf("Writable. \n");
Если это каталог только для чтения, вы получите сообщение об отказе в доступе при открытии его с помощью GENERIC_WRITE
.
Для чтения. только , каталог может быть настроен на запрет текущего пользователя на запись, однако он не предназначен только для чтения. В настоящее время вы получите результат «Этот каталог не только для чтения», но вы по-прежнему не можете писать.
Обновление:
Как указал @RaymondChen, вы можете более точно подтвердить желаемое право доступа к каталогу, используя константы прав доступа к файлу . Возьмите FILE_LIST_DIRECTORY
в качестве примера:
tDir = CreateFile(L"D:\\testNew", FILE_LIST_DIRECTORY, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (INVALID_HANDLE_VALUE == tDir)
printf("Open directory failed with error %d \n", GetLastError());
else
printf("Has right to list the contents of the directory.\n");