C++ 为什么GetFileAttributesW(L";C:";)返回文件“属性”重新分析点?

C++ 为什么GetFileAttributesW(L";C:";)返回文件“属性”重新分析点?,c++,windows,winapi,boost,C++,Windows,Winapi,Boost,通常,GetFileAttributesW(L“C:”)返回0x10(FILE\u ATTRIBUTE\u DIRECTORY),这是合理的 在某些情况下,GetFileAttributesW(L“C:”)将返回0x2416(FILE\u ATTRIBUTE\u DIRECTORY | FILE\u ATTRIBUTE\u resparse\u POINT | FILE\u ATTRIBUTE\u NOT\u CONTENT\u index) 我想知道是什么让它发生,以及如何摆脱它。这个问题使得

通常,
GetFileAttributesW(L“C:”)
返回
0x10
FILE\u ATTRIBUTE\u DIRECTORY
),这是合理的

在某些情况下,
GetFileAttributesW(L“C:”)
将返回
0x2416
FILE\u ATTRIBUTE\u DIRECTORY | FILE\u ATTRIBUTE\u resparse\u POINT | FILE\u ATTRIBUTE\u NOT\u CONTENT\u index


我想知道是什么让它发生,以及如何摆脱它。这个问题使得
boost::filesystem::canonical
无法工作。你知道吗

这里的主要困惑是
C:
的意思。这被解释为
C
驱动器上的当前目录。MSDN上对此进行了解释:

如果文件名仅以磁盘指示符开头,而不是以 冒号后的反斜杠将被解释为到 驱动器上具有指定字母的当前目录。注意 当前目录可能是根目录,也可能不是根目录,具体取决于 在最近的“更改目录”期间设置的内容 磁盘上的操作。该格式的示例如下:

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

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

。为什么您认为GetFileAttributesW有缺陷?
C:
与'C:\'不同。它是当前的工作目录,可能会根据您的节目而变化。@RichardCriten您的意思是“C:”指的是“当前工作目录”,这与我最初的想法非常不同。你能给我点证据吗?@IInspectable谢谢你,Richard你说得对:)