要确定相对路径或路径中包含\..\
的文件的规范路径,stackoverflow建议在此处使用GetFullPathName()
或在此处使用GetLongPathName()
。
这些函数之间有什么区别?
目的是从相对路径(如..\someDir\someFile.txt
和someOtherDir\someFile.txt
)获取以驱动器号开头的路径,并从路径中消除额外的\..\
(如C:\dirA\dirB\..\someFile.txt
-> C:\dirA\someFile.txt
)。
GetFullPathName
和GetLongPathName
的参考资料吗? - Some programmer dudeGetFullPathName
不进行长/短名称转换。因此,如果您有verlongnamehere
并将其作为verylo~1
传递,则GetFullPathName
将其返回为verylo~1
,而GetLongPathName
将其转换为长版本verlongnamehere
(而GetShortPathName
将verlongnamehere
返回为verylo~1
)。此外,GetFullPathName
似乎使用一些全局状态或类似的东西,使其无法从DLL中使用或线程安全。 - Some programmer dudeGetLongPathName
的参考资料并没有说明它实际上解析相对路径,它只是将路径从短格式转换为长格式。GetFullPathName
实际上执行了相对到绝对路径名解析,然后可以传递给GetLongPathName
或GetShortPathName
。 - Some programmer dude