我发现了一个关于
以下代码是我所说的示例:
这种行为正常吗?在
GetFullPathName()
的行为(通过使用 QFileInfo::canonicalFilePath()
),我不太理解:当我使用由当前驱动器号和冒号组成的字符串调用此函数时,它返回当前工作目录的路径,而我期望得到驱动器号的路径。以下代码是我所说的示例:
#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';
}
输出:
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
这种行为正常吗?在
GetFullPathName
文档中,它指出:
如果你指定了"U:",返回的路径是"U:\"。
如果"U"是当前的驱动器字母,为什么不是这种情况呢?