c - 为什么 C 函数 _stat 在拒绝访问文件夹时没有正确设置 errno

标签 c windows folder-permissions

我正在用 VS2005 开发一个 C 程序,我发现当文件夹访问受到限制时,我无法创建文件夹或从文件夹中删除任何内容,文件夹的 _stat 函数没有正确设置 errno . errno 设置为值 ENOENT。我绝对不能修改权限,所以我可以获得值 EACCES。 _stat 返回 0(无错误)或 errno 设置为 ENOENT。你能告诉我如何区分真正存在的文件夹和没有足够文件夹权限的用户吗?另一件我不明白的事情是什么特定的权限导致 _stat 返回 -1。当我查看我一直在测试 _stat 的文件夹的有效权限时,它在“拒绝”列中没有任何内容。即使“创建文件夹/附加数据”被选中,但我无法在其中创建文件夹。

谢谢 & BR -Matti

最佳答案

Windows 安全属性的粒度太细,无法使用 _stat() 进行测试。它的实现使用 FindFirstFile() API 函数,只有在未授予枚举文件的权限时才会失败。这种情况很少见,通常关闭的限制性更强的是写入或修改。

黑客攻击安全 API 来测试 ACL 通常是可以避免的,而且非常不可移植。当您尝试打开该文件时,您只是发现您没有必要的权限。完全可以接受,因为您无法在代码中执行任何操作来获得访问文件的权限。

关于c - 为什么 C 函数 _stat 在拒绝访问文件夹时没有正确设置 errno,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3799314/

相关文章:

iphone - 如何将 nsstring 转换为二进制并将二进制转换为十六进制

c++ - 在指针变量中存储非零的整数常量

c++ - 写入文件原始磁盘扇区

linux - 设置ACL权限后用户无法访问文件夹

c - 向右移动/我做错了什么?

c++ - 我的内存在哪里?

windows - 否则如果批处理文件

windows - 将文件输出存储到变量中

c# - 如何在 C# 中为 IIS 用户授予文件夹权限?