这两个都是kernal32.dll提供的API。
参考MSDN说明:
GetFullPathName: 用于获取某文件的全路径和文件名称;不推荐在多线程应用中使用;该函数不检查返回的路径是否合法或存在;也用于计算路径中的部分值(比如取父目录)。
GetLongPathName: 转换指定路径为长路径格式(相对短路径ShortPath : dos格式而言);在多数系统中,短路径都包含有符号'~',但是并不是所有的系统都遵循这个约定,也不是意味这你可以跳过调用GetLongPathName;若短路径是合法的,而返回的长路径是非法,函数也会返回成功。
以上说明,基本已经清楚地说明了用法。但是实际编程当中,还是有不少人,对短路径的转换,用GetFullPathName来处理——虽然也能成功,但是也有例外(比如程序处于program files下,点击关联文件,启动该程序,并不能得到预期的文件长路径)。应该使用GetLongPathName,这才是专门用于转换长路径的函数。
短路径名实在DOS下的命名规则 在DOS中,主文件名的长度不能超过8个字符 如果超过了8个 系统自动截取前6个字符,然后加上~1 如果前6个字符一样了,就依次使用~2,~3
举个例子,如果C盘目录下有Program Files、Program Filess、Programme Files三个文件夹,他们的前6个字符都是progra。将他们按照字母顺序排序: Program Files Program Filess Programme Files 那么短路径分别为: progra~1 progra~2 progra~3