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

标签 c++ windows winapi path relative-path

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

这些函数有什么区别?

目的是从相对路径(如 ..\someDir\someFile.txtsomeOtherDir\someFile.txt)获取以盘符开头的路径,然后从路径中删除多余的 \..\(例如 C:\dirA\dirB\..\someFile.txt -> C:\dirA\someFile. txt).

最佳答案

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

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

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

长话短说:
调用 GetFullPathName 将相对路径解析为绝对路径。
调用 GetLongPathName 将可能包含短 (8.3) 名称的绝对路径解析为长名称形式。


小心:

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

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

关于c++ - WinAPI 中的 GetLongPathName 和 GetFullPathName 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31249019/

相关文章:

c++ - 初始化静态字段

c++ - 欧拉计划#11,变量溢出

c++ - 简单的 if 条件与字符串

Windows 批处理文件无法始终如一地工作

php - 使用 PHP 执行 .exe 文件

winapi - Windows XP 的线程安全 GetTickCount64 实现

winapi - 如何在 MASM 中为一个项目编写和组合多个源文件?

c++ - 如何编写和调用std::hash? -用于gmp的mpz_class和mpz_t

c++ - Qt 如何设法将 main() 用于 Windows 中的非控制台应用程序?

c++ - 我们可以强制 shell 扩展显式调用 IShellIconOverlayIdentifier::GetOverlayInfo 吗?