GetLongPathName和GetShortPathName
来源:互联网 发布:徐留平一汽改革知乎 编辑:程序博客网 时间:2024/06/07 19:47
引言
上一篇文章介绍了 SHGetSpecialFolderPath
该api用来获取指定的系统路径。
而 GetLongPathName
和GetShortPathName
函数分别用来将文件全路径字符串转换为不缩写的全路径和缩写的全路径字符串。
这两个函数极其重要!!!很多人写程序时不注意这一点——包括我,比如,使用GetModuleFileName
获取文件路径,我们一般都将获取到的路径直接拿来用。在99.9%的情况下,我们获取到的是没有缩写的全路径,但是,某些情况下,获取到的却是缩写的,例如,
C:\Prog~1\Comm~1\aaa~1.exe
如果这个时候,取进程的名称,将得到aaa~1.exe
,很明显,这种结果是我们所不愿意看到的,它会导致很严重的问题,而这种错误又是极其难以查找的。
所以,个人认为,在获取文件全路径后,都应该调用GetLongPathName
,以便保证得到的路径不是缩写形式。
0x01.GetLongPathName函数
DWORD WINAPI GetLongPathName( LPCTSTR lpszShortPath,//指定的要转换的路径 LPTSTR lpszLongPath, //接收长路径的缓冲区 DWORD cchBuffer //缓冲区长度);
函数说明:
将指定的路径转化成长路径形式
返回值:
函数执行成功则返回lpszLongPath
接收的字符串长度,不包括空字符;如果lpszLongPath
长度太小,则函数返回接收长路径需要的缓冲区长度,包括空字符,因此如果返回值大于cchBuffer
,则应重新分配lpszLongPath
,使其长度足够容纳长路径;如果函数因为其他原因失败则返回0,可以通过GetLastError()
获取错误信息。
0x02.GetShortPathName函数
DWORD WINAPI GetShortPathName( _In_ LPCTSTR lpszLongPath, //指定的要转换的路径 _Out_ LPTSTR lpszShortPath, //接收短路径形式的缓冲区 _In_ DWORD cchBuffer //缓冲区的长度);
函数说明:
获取指定路径的短路径形式
返回值:
如果执行成功,则返回lpszShortPath
接收的字符串的长度,不包括空字符;如果lpszShortPath
长度太小,则返回lpszShortPath
接收短路径字符串需要的长度,包括空字符;如果其他原因导致失败,则返回0,通过GetLastError()
获取出错信息。
0x03.使用例子:
//...long length = 0;TCHAR* buffer = NULL;// First obtain the size needed by passing NULL and 0.length = GetShortPathName(lpszPath, NULL, 0);if (length == 0) ErrorExit(TEXT("GetShortPathName"));// Dynamically allocate the correct size // (terminating null char was included in length)buffer = new TCHAR[length];// Now simply call again using same long path.length = GetShortPathName(lpszPath, buffer, length);if (length == 0) ErrorExit(TEXT("GetShortPathName"));_tprintf(TEXT("long name = %s shortname = %s"), lpszPath, buffer);delete [] buffer;///...
- GetLongPathName和GetShortPathName函数
- GetFullPathName.GetLongPathName 和GetShortPathName
- GetLongPathName和GetShortPathName函数
- GetLongPathName和GetShortPathName
- GetFullPathName和GetLongPathName
- GetFullPathName和GetLongPathName
- GetLongPathName的使用
- GetLongPathName的使用
- 使用GetShortPathName解决unicode路径无法访问
- C#调用windows api 函数GetShortPathName
- 巧用GetShortPathName解决带Unicode字符路径在非Unicode程序里的无法访问的问题
- . 和 ->
- || 和&&
- .和::
- “?”和“!”
- #和##
- && 和 ||
- 、和
- 安装IDEA和运行SCALA程序
- Android vold进程三 MountService介绍
- ionic2 tabs 自定义图标
- img标签设置本地路径
- ArcGIS Catalog添加ArcGIS Server服务器出现GXAGSUI 参数错误的解决方法
- GetLongPathName和GetShortPathName
- Idea开发环境中搭建Maven并且使用Maven打包部署程序
- Spring中引入其它配置文件
- orcle 分区表创建、查询、知识总结
- 初识项目管理
- 从编译器角度分析C语言中数组名和指针的区别
- dubbo的通信过程
- Redis命令之EXPIRE
- Javascript—②函数