WinAPI中的GetLongPathName和GetFullPathName有什么区别?

时间:2015-07-06 14:53:28

标签: c++ windows winapi path relative-path

为了确定由相对路径指定的文件的规范路径或中间包含\..\的路径,stackoverflow建议使用GetFullPathName() hereGetLongPathName() here

这些功能有什么区别?

目的是从相对路径(例如..\someDir\someFile.txtsomeOtherDir\someFile.txt)获取以驱动器号开头的路径,并从路径中消除额外的\..\(例如C:\dirA\dirB\..\someFile.txt - > C:\dirA\someFile.txt)。

1 个答案:

答案 0 :(得分:8)

GetFullPathName通过预先设置调用进程的当前工作目录,将文件名和相对路径名解析为绝对路径。

GetLongPathName只能将短名称(8.3)解析为长名称。

请注意,后者需要磁盘访问,因此也可以使用当前工作目录来解析相对路径。

<强> TL; DR:
调用GetFullPathName来解析绝对路径的相对路径 调用GetLongPathName以解析可能包含长名称形式的短(8.3)名称的绝对路径。

小心:

当前工作目录是每个进程资源,可以更改,例如通过标准文件打开对话框。我将使用 only 来解析可能与程序启动时的CWD相关的命令行参数。

每个8.3命名文件可能不存在长路径名。