考虑以下代码片段
#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上无法读取的文件(没有读取权限的文件或其读取权限设置为&#34的文件;拒绝&#34;在其属性中 - >安全选项卡),GetFileAttributesEx
返回FILE_ATTRIBUTE_NORMAL
,表示该文件的no other attribute is set。
对于可写文件和非可读文件,也会返回此属性。
我们使用此信息为我们的产品代码中的文件设置权限。
我们得出结论,GetFileAttributesEx
可能会在不可读文件的情况下返回错误的属性。我们想知道我们的结论是否正确。
如果是,那么这是GetFileAttributesEx
的已知问题吗?
如果没有那么
使用Windows API获取不可读文件的文件属性(文件权限可能?)的正确方法是什么?如果可能,使用Boost或标准C ++文件系统库?
答案 0 :(得分:1)
它可能根本没有成功。如果查看documentation for GetFileAttributesEx,它实际上会返回一个BOOL。
返回值如果函数成功,则返回值为非零值 值。
如果函数失败,则返回值为零(0)。扩展 错误信息,请致电GetLastError。
我的猜测是,如果呼叫失败,“fwad”是未定义的。尝试检查故障指示的返回值。我的猜测是GetLastError将返回类似ERROR_ACCESS_DENIED的内容。
Windows API不会抛出异常,所以很遗憾,您只需要检查每个返回值。