Windows上无法读取的文件属性

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

考虑以下代码片段

    #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,这意味着该文件的no other attribute is set

对于可写文件和非可读文件,也会返回此属性。

我们使用此信息在产品代码中设置文件的权限。

我们得出结论,GetFileAttributesEx可能会在不可读文件的情况下返回错误的属性。我们想知道我们的结论是否正确。

如果是,那么这是GetFileAttributesEx的已知问题吗?

如果没有那么

使用Windows API获取文件属性(文件权限可能?)的正确方法是什么?或者如果可能,使用Boost或标准C ++文件系统库?

c++ winapi filesystems
1个回答
1
投票

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

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

如果函数失败,则返回值为零(0)。要获取扩展错误信息,请调用GetLastError

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

Windows API不会抛出异常,所以很遗憾,您必须检查几乎每个返回值。

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