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

时间:2016-07-11 06:56:15

标签: c++ windows winapi boost

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

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

我想知道是什么让它发生以及如何摆脱它。此问题导致boost::filesystem::canonical无效。你有什么主意吗?

1 个答案:

答案 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:\\")