WinAPI 中的 GetLongPathName 和 GetFullPathName 有什么区别?
What is the difference between GetLongPathName and GetFullPathName in WinAPI?
为了确定由相对路径或中间包含 \..\
的路径指定的文件的规范路径,Whosebug 建议使用 GetFullPathName()
here or 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) 名称的绝对路径解析为长名称形式。
注意:
当前工作目录是每个进程的资源,可以更改,例如通过标准文件打开对话框。我会使用这个 only 来解析可能与程序启动的 CWD 相关的命令行参数。
每个 8.3 命名文件可能不存在长路径名。
为了确定由相对路径或中间包含 \..\
的路径指定的文件的规范路径,Whosebug 建议使用 GetFullPathName()
here or 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) 名称的绝对路径解析为长名称形式。
注意:
当前工作目录是每个进程的资源,可以更改,例如通过标准文件打开对话框。我会使用这个 only 来解析可能与程序启动的 CWD 相关的命令行参数。
每个 8.3 命名文件可能不存在长路径名。