You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Win32 API中GetFileAttributesW()返回未文档化值17的问题排查

问题解释与解决方案

核心原因

返回值17是两个文件属性常量的按位组合结果:

  • FILE_ATTRIBUTE_READONLY(值为1,0x01):表示目录被标记为只读
  • FILE_ATTRIBUTE_DIRECTORY(值为16,0x10):表示目标是目录

Windows文件属性是按位存储的标志位,多个属性会通过按位或合并成一个数值返回,而非单一常量值。所以17 = 1 + 16,完全符合API的设计逻辑。

验证与正确用法

不要直接将返回值与单一常量比较,应该用按位与操作判断每个属性是否存在。修改代码中的属性判断逻辑如下:

DWORD fileAttribute = GetFileAttributesW(*(dir + 1));
if (fileAttribute == INVALID_FILE_ATTRIBUTES) {
    // 处理错误
    DWORD err = GetLastError();
    wprintf(L"Error: %lu\n", err);
} else {
    // 判断是否是目录
    if (fileAttribute & FILE_ATTRIBUTE_DIRECTORY) {
        wprintf(L"This is a directory\n");
    }
    // 判断是否是只读
    if (fileAttribute & FILE_ATTRIBUTE_READONLY) {
        wprintf(L"This item is read-only\n");
    }
    // 用十六进制打印属性值,更易识别位标志组合
    wprintf(L"Raw attributes (hex): 0x%X\n", fileAttribute);
}

补充说明

  • 系统默认的用户下载文件夹通常会被标记为只读,这是Windows的常见行为,因此会同时返回目录和只读属性。
  • GetLastError()返回ERROR_SUCCESS说明API调用完全正常,返回的属性值是有效的。

内容的提问来源于stack exchange,提问作者Gregor Hartl Watters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:27:30