【发布时间】:2017-12-29 11:54:48
【问题描述】:
考虑下面的sn-p代码
#include <iostream>
#include <windows.h>
int main()
{
WIN32_FILE_ATTRIBUTE_DATA wfad;
GetFileAttributesEx(("C:\\TEMP\\noreadfile"), GetFileExInfoStandard, &wfad); //"noreadfile" is unreadable file
std::cout << wfad.dwFileAttributes; // 128
return 0;
}
对于 Windows 上不可读的文件(没有读取权限的文件或在其属性 -> 安全选项卡中将读取权限设置为“拒绝”的文件),GetFileAttributesEx 返回FILE_ATTRIBUTE_NORMAL,这意味着@该文件的 987654321@。
对于可写和非只读文件也返回此属性。
我们使用这些信息来设置产品代码中文件的权限。
我们得出结论,GetFileAttributesEx 可能会在文件不可读的情况下返回不正确的属性。我们想知道我们的结论是否正确。
如果是,那么这是 GetFileAttributesEx 的已知问题吗?
如果不是那么
使用 Windows API 或如果可能的话,使用 Boost 或标准 C++ 文件系统库获取 不可读文件 的文件属性(可能是文件权限?)的正确方法是什么?
【问题讨论】:
-
文件属性(例如只读、系统、隐藏等)与文件安全无关。要获取文件的自主访问控制列表 (DACL),请致电
GetNamedSecurityInfo。
标签: c++ winapi filesystems