C++ 为什么GetFullPathName返回工作目录?
我偶然发现了(通过使用)的一个行为,但我不太了解:当我使用由当前驱动器号和冒号组成的字符串调用此函数时,它返回当前工作目录的路径,而我希望返回驱动器号的路径 以下代码举例说明了我所说的内容:C++ 为什么GetFullPathName返回工作目录?,c++,winapi,path,C++,Winapi,Path,我偶然发现了(通过使用)的一个行为,但我不太了解:当我使用由当前驱动器号和冒号组成的字符串调用此函数时,它返回当前工作目录的路径,而我希望返回驱动器号的路径 以下代码举例说明了我所说的内容: #include <windows.h> #include <iostream> #include <string> std::string canonicalFilePath(const char *path) { static const std::size
#include <windows.h>
#include <iostream>
#include <string>
std::string canonicalFilePath(const char *path)
{
static const std::size_t BufferSize = 300;
char canonicalPath[BufferSize];
GetFullPathName(path, BufferSize, canonicalPath, 0);
return std::string(canonicalPath);
}
int main(int, char **)
{
SetCurrentDirectory("C:/some/path");
std::cout << "In C:" << '\n';
std::cout << " C -> " << canonicalFilePath("C") << '\n'
<< " C: -> " << canonicalFilePath("C:") << '\n'
<< " C:/ -> " << canonicalFilePath("C:/") << '\n'
<< " D -> " << canonicalFilePath("D") << '\n'
<< " D: -> " << canonicalFilePath("D:") << '\n'
<< " D:/ -> " << canonicalFilePath("D:/") << '\n';
SetCurrentDirectory("D:/other/path");
std::cout << "In D:" << '\n';
std::cout << " C -> " << canonicalFilePath("C") << '\n'
<< " C: -> " << canonicalFilePath("C:") << '\n'
<< " C:/ -> " << canonicalFilePath("C:/") << '\n'
<< " D -> " << canonicalFilePath("D") << '\n'
<< " D: -> " << canonicalFilePath("D:") << '\n'
<< " D:/ -> " << canonicalFilePath("D:/") << '\n';
}
这种行为正常吗?在这方面,有人指出
如果指定“U:”则返回的路径为“U:\”
如果“U”是当前驱动器号,为什么不是这样呢?来源:
如果文件名仅以磁盘指示符开头,而不是以
冒号后的反斜杠将被解释为到
驱动器上具有指定字母的当前目录。注意
当前目录可能是根目录,也可能不是根目录,具体取决于
在最近的“更改目录”期间设置的内容
磁盘上的操作
该格式的示例如下:
从旧时起就是这样。如果当前目录位于驱动器
D:
,则D:
将始终是当前目录。文档中讨论的情况是,当您传递与当前目录不同的驱动器时
In C:
C -> C:\some\path\C // ok
C: -> C:\some\path // ? why not C:\ ?
C:/ -> C:\ // ok
D -> C:\some\path\D // ok
D: -> D:\ // ok
D:/ -> D:\ // ok
In D:
C -> D:\other\path\C // ok
C: -> C:\ // ok
C:/ -> C:\ // ok
D -> D:\other\path\D // ok
D: -> D:\other\path // ? why not D:\ ?
D:/ -> D:\ // ok