为什么GetFileAttributesW(L“C:”)返回FILE_ATTRIBUTE_REPARSE_POINT?

通常, GetFileAttributesW(L"C:")返回0x10FILE_ATTRIBUTE_DIRECTORY ),这是合理的。

在某些情况下, GetFileAttributesW(L"C:")将返回0x2416FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED

我想知道是什么让它发生,以及如何摆脱它。 这个问题使boost::filesystem::canonical不能工作。 你有什么主意吗?

Solutions Collecting From Web of "为什么GetFileAttributesW(L“C:”)返回FILE_ATTRIBUTE_REPARSE_POINT?"

这里主要的困惑是C:意思是什么。 这被解释为C驱动器上的当前目录。 这在MSDN上进行了解释: 命名文件,路径和命名空间 。

如果文件名仅以磁盘标识符开始,而不是以冒号后面的反斜杠开头,则将其解释为指定字母的驱动器上当前目录的相对路径。 请注意,当前目录可能是也可能不是根目录,具体取决于该磁盘上最近一次“更改目录”操作期间的设置。 这种格式的例子如下:

  • “C:tmp.txt”是指驱动器C上当前目录中名为“tmp.txt”的文件
  • “C:tempdir \ tmp.txt”是指驱动器C上当前目录的子目录中的一个文件。

所以GetFileAttributesW(L"C:")返回的值取决于当前目录是什么。 我相信你打算获得根文件夹的属性,在这种情况下,你必须使用GetFileAttributesW(L"C:\\")