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

Ser*_*tch 6 c++ windows winapi path relative-path

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

这些功能有什么区别?

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

pet*_*hen 8

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

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

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

tl; dr:
调用GetFullPathName以解析绝对路径的相对路径.
调用GetLongPathName以解析可能包含长名称形式的短(8.3)名称的绝对路径.


小心:

当前工作目录是每个进程的资源,并且可以通过标准文件打开对话框进行更改.我会用这只是解决命令行参数,可能是相对于程序在启动的CWD.

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

  • 文档说*GetFullPathName不转换指定的文件名lpFileName.如果指定的文件名存在,则可以使用GetLongPathName或GetShortPathName分别转换为长或短路径名.*这似乎与此答案的第二段相矛盾. (2认同)