Windows 目录权限中的奇怪行为?

问题描述 投票:0回答:1

在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;

我尝试了几种方法来将自己限制在一个目录中。

  • 首先,我在当前PC下创建了另一个用户
    test
    ,我试图访问它的主文件夹,假设我是我的PC的管理员,所以我认为它会让我使用UAC访问它(但在我的应用程序中) ,我只通过了路径,所以从来没有提示UAC)。
  • 其次,我手动将自己从
    test
    用户(C:\Users est)的访问权限中删除,我仍然能够调用
    access
    并返回
    0
  • 最后,即使我添加
    Deny
    读/写,我仍然可以调用
    access

只有当我拨打

opendir
+
readdir
时,我才能从
NULL
中取出
readdir

enter image description here

c windows permissions posix
1个回答
0
投票

只需使用

opendir
,无需先检查。如果发生错误,则返回
NULL
。检查一下。如果返回
NULL
并且您想具体检查是否是权限错误,请检查
errno
是否为
EPERM

© www.soinside.com 2019 - 2024. All rights reserved.