C++ windows上不可读的文件属性

C++ windows上不可读的文件属性,c++,winapi,filesystems,C++,Winapi,Filesystems,考虑以下代码片段 #include <iostream> #include <windows.h> int main() { WIN32_FILE_ATTRIBUTE_DATA wfad; GetFileAttributesEx(("C:\\TEMP\\noreadfile"), GetFileExInfoStandard, &wfad); //"noreadfile" is unreadable

考虑以下代码片段

    #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;
    }
#包括
#包括
int main()
{
WIN32_文件_属性_数据wfad;
GetFileAttributesEx(((“C:\\TEMP\\noreadfile”)、GetFileExInfo标准和wfad);/“noreadfile”是不可读的文件
std::cout security tab)在Windows上,
GetFileAttributesEx
返回
FILE\u ATTRIBUTE\u NORMAL
,这意味着对于该文件

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

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

我们的结论是,
GetFileAttributesEx
可能在无法读取文件的情况下返回不正确的属性。我们想知道我们的结论是否正确

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

如果没有,那么


<> P>使用Windows API或使用Boost或标准C++文件系统库,如果可能的话,使用强的或不可读取的文件,文件属性(文件权限?)可能是正确的方法?

< P>它可能根本就没有成功。如果你看一下,它实际上返回了一个布尔。 返回值如果函数成功,则返回值为非零 价值观

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

我的猜测是,如果调用失败,“fwad”是未定义的。请尝试检查返回值是否有失败指示。我的猜测是GetLastError将返回类似的值


Windows API不会引发异常,因此不幸的是,您必须检查几乎每个返回值。

文件属性(例如只读、系统、隐藏等)与文件安全无关。要获取文件的自主访问控制列表(DACL),调用。OP应该检查是否成功是正确的,但在这种情况下读取文件属性不太可能失败,即使文件安全性拒绝读取它们的权限。OP很可能有权列出父目录“C:\Temp”。这隐式地允许读取目录中任何文件的属性。类似地,对目录的删除子访问允许删除任何未设置只读属性的文件,即使文件的安全性不允许。这两种情况下,父目录的安全性优于包含的文件。奇怪的是ric“读取”访问包括“读取属性”,但据我所知,只要我能列出所有文件所在的目录,我就可以看到所有文件的所有属性。这是出于设计考虑。列出目录时,文件属性必须可用,因此列出父目录的权限始终授予读取文件属性的权限。这假设调用程序以具有访问相关目录的权限。如果该目录为其他用户所有,则访问可能被拒绝