GetFileAttributes以绝对路径失败

时间:2017-04-15 08:17:01

标签: c++ winapi

我正在使用WinAPI创建一个简单的程序来检查目录是否存在,这是函数代码:

DEBUG:suds.client:headers = {'SOAPAction': u'"http://www.GlobalBettingExchange.com/ExternalAPI/GetPrices"', 'Content-Type': 'text/xml; charset=utf-8'}
DEBUG:suds.client:http succeeded: *long xml here*

然后我在我的主要代码中用这行代码测试它:

BOOL directoryExists( LPCSTR path ) {
    DWORD pathAttributes = GetFileAttributes ( path );

    return pathAttributes != INVALID_FILE_ATTRIBUTES 
                  && pathAttributes == FILE_ATTRIBUTE_DIRECTORY;
 }

看起来我得到了"找不到目录"无论我尝试输入什么绝对路径。无论如何,相对路径成功!

我在哪里失败了? :|

提前致谢!

2 个答案:

答案 0 :(得分:5)

GetFileAttributes的返回值是位字段,而不是单个值,并且每个文件属性常量都包含一个位掩码,因此您应该像这样检查它:

return (INVALID_FILE_ATTRIBUTES != pathAttributes) 
              && (0 != (pathAttributes & FILE_ATTRIBUTE_DIRECTORY));

此外,您应该使用GetFileAttributesW和宽字符路径,因为GetFileAttributesA无法处理Unicode路径。

答案 1 :(得分:1)

您没有正确检查FILE_ATTRIBUTE_DIRECTORY位。 试试这个:

/**
 * @Assert\Regex(
 *     pattern = "/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9!@#$%^&*()_]+){8,20}$"/",
 * 
 * rest of options...
 *
 * )
 */