为了确定由相对路径或中间包含 \..\
的路径指定的文件的规范路径,stackoverflow 建议使用 GetFullPathName()
here 或 GetLongPathName()
here 。
这些功能有什么区别?
目的是从相对路径(如 ..\someDir\someFile.txt
和 someOtherDir\someFile.txt
)中获取以驱动器号开头的路径,并从路径中消除额外的 \..\
(如 C:\dirA\dirB\..\someFile.txt
-> C:\dirA\someFile.txt
)。
最佳答案
GetFullPathName
通过在调用进程的当前工作目录前面加上文件名和相对路径名来解析为绝对路径。GetLongPathName
仅将短 (8.3) 名称解析为长名称。
请注意,后者需要访问磁盘,因此也可能使用当前工作目录来解析相对路径。
tl;博士:
调用 GetFullPathName
将相对路径解析为绝对路径。
调用 GetLongPathName
将可能包含短 (8.3) 名称的绝对路径解析为长名称形式。
小心:
当前工作目录是每个进程的资源,可以更改,例如通过标准文件打开对话框。我只会使用它来解析可能与程序启动的 CWD 相关的命令行参数。
对于每个 8.3 命名的文件,可能不存在长路径名。