Windows上无法读取的文件属性

时间:2017-12-29 11:54:49

标签: c++ winapi filesystems

考虑以下代码片段

    #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 ++文件系统库?

1 个答案:

答案 0 :(得分:1)

它可能根本没有成功。如果查看documentation for GetFileAttributesEx,它实际上会返回一个BOOL。

  

返回值如果函数成功,则返回值为非零值   值。

     

如果函数失败,则返回值为零(0)。扩展   错误信息,请致电GetLastError

我的猜测是,如果呼叫失败,“fwad”是未定义的。尝试检查故障指示的返回值。我的猜测是GetLastError将返回类似ERROR_ACCESS_DENIED的内容。

Windows API不会抛出异常,所以很遗憾,您只需要检查每个返回值。