通常情况下,GetFileAttributesW(L"C:")
会返回0x10
(FILE_ATTRIBUTE_DIRECTORY
),这是合理的。
在某些情况下,GetFileAttributesW(L"C:")
会返回0x2416
(FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
)
我想知道是什么让它发生以及如何摆脱它。此问题导致boost::filesystem::canonical
无效。你有什么主意吗?
答案 0 :(得分:7)
这里的主要困惑是C:
的含义。这被解释为C
驱动器上的当前目录。这在MSDN上解释:Naming Files, Paths, and Namespaces。
如果文件名仅以磁盘指示符开头而不是 冒号后的反斜杠,它被解释为相对路径 具有指定字母的驱动器上的当前目录。注意 当前目录可能是也可能不是根目录 在最近的“更改目录”中设置的内容 该磁盘上的操作。此格式的示例如下:
- “C:tmp.txt”指的是驱动器C上当前目录中名为“tmp.txt”的文件。
- “C:tempdir \ tmp.txt”是指驱动器C上当前目录的子目录中的文件。
因此GetFileAttributesW(L"C:")
返回的值取决于当前目录的内容。我相信您打算获取根文件夹的属性,在这种情况下,您必须使用GetFileAttributesW(L"C:\\")
。