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

P.X*_*P.X 2 c++ windows winapi boost

通常,GetFileAttributesW(L"C:")return 0x10(FILE_ATTRIBUTE_DIRECTORY),这是合理的.

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

我想知道是什么让它发生以及如何摆脱它.这个问题使得boost::filesystem::canonical无法正常工作.你有什么主意吗?

Dav*_*nan 7

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

如果文件名仅以磁盘指示符开头但不以冒号后面的反斜杠开头,则会将其解释为指定字母的驱动器上当前目录的相对路径.请注意,当前目录可能是也可能不是根目录,具体取决于在该磁盘上最近的"更改目录"操作期间设置的目录.此格式的示例如下:

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

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