在Linux中,我试图确定我是否对目录有读/写权限,所以我做了
access(dir, R_OK | W_OK) == 0
,效果很好。
我尝试在Windows中做同样的事情,但是,即使我手动删除自己对文件夹的读/写权限,
access
仍然会返回0
。这似乎不是一个正确的行为,在 Windows 中使用 C 确定目录访问权限的正确方法是什么?
目前,我必须使用这个:
bool ok = access(dir, R_OK | W_OK) == 0;
// in Windows, even if you remove the read/write permission
// of the user, access would still return 0 (success)!
DIR* dp = opendir(dir);
struct dirent* entry = NULL;
// readdir would return NULL if I don't have permission
if (dp) entry = readdir(dp);
return ok && dp && entry;
我尝试了几种方法来将自己限制在一个目录中。
test
,我试图访问它的主文件夹,假设我是我的PC的管理员,所以我认为它会让我使用UAC访问它(但在我的应用程序中) ,我只通过了路径,所以从来没有提示UAC)。test
用户(C:\Users est)的访问权限中删除,我仍然能够调用 access
并返回 0
Deny
读/写,我仍然可以调用 access
只有当我拨打
opendir
+ readdir
时,我才能从NULL
中取出readdir
。
只需使用
opendir
,无需先检查。如果发生错误,则返回 NULL
。检查一下。如果返回 NULL
并且您想具体检查是否是权限错误,请检查 errno
是否为 EPERM
。