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

为了确定由相对path或包含\..\中间path指定的文件的规范path,stackoverflowbuild议在这里使用GetFullPathName()GetLongPathName()

这些function有什么区别?

目的是获取从相对path(如..\someDir\someFile.txtsomeOtherDir\someFile.txt )驱动器号开始的path,并从path中消除额外的\..\ (如C:\dirA\dirB\..\someFile.txt – > C:\dirA\someFile.txt )。

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

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

请注意,后者需要磁盘访问,所以相对路径也可能通过使用当前工作目录来解决。

TL;博士:
调用GetFullPathName将相对路径解析为绝对路径。
调用GetLongPathName来解析一个绝对路径,该路径可能包含一个短名称(8.3)以长名形式。


小心:

当前工作目录是每个进程的资源,并且可以通过标准文件打开对话框来改变。 我只会用它来解析命令行参数,这些参数可能与程序启动时的CWD有关。

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