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你说得对:)