WinAPI确定文件是否可访问/私有的方法

saz*_*azr 2 c++ winapi

在win32 c ++中; 有没有办法确定文件夹/文件是否可访问?您知道如果您尝试访问C:/ Windows目录中的某个文件夹,您将看到一个弹出窗口"此文件夹无法访问".

也许有一个文件属性常量表示该文件是私有的?也许像FILE_ATTRIBUTE_PRIVATE?

WIN32_FIND_DATA dirData;

while (FindNextFile( dir, &dirData ) != 0 )
{
    // I made the following constant up
    if ( !(fileData.dwFileAttributes & FILE_ATTRIBUTE_PRIVATE) )
    {
        // file is accessible so store filepath
        files.push_back( fileData.cFileName );
    }
    else // file is not accessible so dont store
}
Run Code Online (Sandbox Code Playgroud)

或者是通过去了解的唯一方法:

dir = FindFirstFileEx( (LPCTSTR)directory.c_str(), FindExInfoStandard, &dirData, FindExSearchNameMatch, NULL, 0 );

if ( dir == ??? ) { the file is inaccessible } [/code]
Run Code Online (Sandbox Code Playgroud)

Ben*_*igt 8

最好的办法就是尝试访问它.

你可以计算出特定用户帐户的访问控制列表授予的访问权限,但这是相当复杂的,而且你做的访问后,检查权限可能会改变.所以只需打开文件并处理访问被拒绝的错误.

  • "拒绝访问"是指`GetLastError()== 5`. (2认同)