设置文件属性成功但检索失败
Set File attribute succed but retriving it fails
我使用 SetFileAttributesW 来设置自定义文件属性,例如0x200008,而SetFileAttributesWreturns非零表示没有错误。但 GetFileAttributesW 检索忽略设置属性的文件属性。
int main()
{
uint32_t magic = 0x200008;
DWORD attribute = GetFileAttributesW(L"test");
cout << attribute << endl;
if ((attribute & magic) == magic)
cout << "has magic" << endl;
else
{
attribute |= magic;
cout << attribute << endl;
}
cout << SetFileAttributesW(L"test", attribute) << " " << GetLastError();
cin.get();
return 0;
}
以及每个 运行
的输出
32
2097192
1 0
谁能帮帮我?
最佳。
没有任何属性有效,如果您查看 wmd.h,您可以找到下一个定义:
#if (_WIN32_WINNT < _WIN32_WINNT_WIN8)
#define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
#define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
#else
#define FILE_ATTRIBUTE_VALID_FLAGS 0x0002ffb7
#define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000231a7
#endif
因此您的自定义文件属性 0x200008 无效并且将是未定义的行为。然而,在当前的实现中,文件系统会忽略它们不理解的任何值,而是 return 错误
见 FASTFAT source:
//
// Only permit the attributes that FAT understands. The rest are silently
// dropped on the floor.
//
Attributes = (UCHAR)(Buffer->FileAttributes & (FILE_ATTRIBUTE_READONLY |
FILE_ATTRIBUTE_HIDDEN |
FILE_ATTRIBUTE_SYSTEM |
FILE_ATTRIBUTE_DIRECTORY |
FILE_ATTRIBUTE_ARCHIVE));
NTFS 做同样的事情。
所以只使用在 windows 头文件和掩码 FILE_ATTRIBUTE_VALID_SET_FLAGS
中声明的属性
您似乎使用了不受支持的值。 Microsoft 未记录 0x200008。
查看支持的常量:[https://msdn.microsoft.com/en-us/library/windows/desktop/gg258117(v=vs.85).aspx][1]
我使用 SetFileAttributesW 来设置自定义文件属性,例如0x200008,而SetFileAttributesWreturns非零表示没有错误。但 GetFileAttributesW 检索忽略设置属性的文件属性。
int main()
{
uint32_t magic = 0x200008;
DWORD attribute = GetFileAttributesW(L"test");
cout << attribute << endl;
if ((attribute & magic) == magic)
cout << "has magic" << endl;
else
{
attribute |= magic;
cout << attribute << endl;
}
cout << SetFileAttributesW(L"test", attribute) << " " << GetLastError();
cin.get();
return 0;
}
以及每个 运行
的输出
32
2097192
1 0
谁能帮帮我?
最佳。
没有任何属性有效,如果您查看 wmd.h,您可以找到下一个定义:
#if (_WIN32_WINNT < _WIN32_WINNT_WIN8)
#define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
#define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
#else
#define FILE_ATTRIBUTE_VALID_FLAGS 0x0002ffb7
#define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000231a7
#endif
因此您的自定义文件属性 0x200008 无效并且将是未定义的行为。然而,在当前的实现中,文件系统会忽略它们不理解的任何值,而是 return 错误 见 FASTFAT source:
//
// Only permit the attributes that FAT understands. The rest are silently
// dropped on the floor.
//
Attributes = (UCHAR)(Buffer->FileAttributes & (FILE_ATTRIBUTE_READONLY |
FILE_ATTRIBUTE_HIDDEN |
FILE_ATTRIBUTE_SYSTEM |
FILE_ATTRIBUTE_DIRECTORY |
FILE_ATTRIBUTE_ARCHIVE));
NTFS 做同样的事情。
所以只使用在 windows 头文件和掩码 FILE_ATTRIBUTE_VALID_SET_FLAGS
中声明的属性您似乎使用了不受支持的值。 Microsoft 未记录 0x200008。
查看支持的常量:[https://msdn.microsoft.com/en-us/library/windows/desktop/gg258117(v=vs.85).aspx][1]