Windows上无法读取的文件属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows上无法读取的文件属性相关的知识,希望对你有一定的参考价值。

考虑以下代码片段

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

答案

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

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

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

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

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

以上是关于Windows上无法读取的文件属性的主要内容,如果未能解决你的问题,请参考以下文章

“未捕获的类型错误:无法在 Websocket Angular JS 上读取未定义的属性‘延迟’”

jqGrid filterToolbar():无法读取未定义的属性“length”

VSCODE:无法读取未定义的属性“local”

TypeError:无法从null读取属性“getDataRange”。 (第3行,文件“代码”)

文件C:WINDOWS\systen32\zh-cn已损坏无法读取,请运行chkdsk工具怎么办?

为什么我得到'TypeError:无法读取属性'slice'的undefined'?