我偶然發現GetFullPathName()
(通過使用QFileInfo::canonicalFilePath()
)的行爲,我不太明白:當我用當前驅動器號和冒號組成的字符串調用該函數時,它返回當前工作的路徑目錄,而我期望的驅動器號的路徑。爲什麼GetFullPathName返回工作目錄?
下面的代碼舉例說明什麼我談論:
#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
documentation,更說明
如果指定了「U:」返回的路徑是「U:\」
爲什麼不允許的情況下,如果「U」是當前盤符?