【发布时间】:2015-09-23 18:53:25
【问题描述】:
为了确定由相对路径或中间包含\..\的路径指定的文件的规范路径,stackoverflow建议使用GetFullPathName() here或GetLongPathName() here。
这些功能有什么区别?
目的是从相对路径(如..\someDir\someFile.txt和someOtherDir\someFile.txt)获取以驱动器号开头的路径,并从路径中消除额外的\..\(如C:\dirA\dirB\..\someFile.txt -> C:\dirA\someFile.txt)。
【问题讨论】:
-
您是否尝试过阅读参考文献,例如
GetFullPathName和GetLongPathName? -
@JoachimPileborg,是的。你?通过阅读参考资料来可靠地捕捉差异并不容易。我认为对于两者都有经验的人来说更容易解释。问题出在例如PathCanonicalize 几乎没有规范化路径,但是它的名字是这样说的。只有在 Debug 中我才意识到这一点,然后再次阅读参考并意识到 PathCanonicalize 的奇怪行为记录在哪里。
-
我在这些参考资料上花了几分钟,我的信心只下降了,我可以权威地解释差异。我期待着了解答案。
-
据我了解,一个主要区别是
GetFullPathName不进行长/短名称转换。因此,如果您有verlongnamehere并将其传递为verylo~1,则GetFullPathName将其返回为verylo~1,而GetLongPathName将其转换为长版本verlongnamehere(并且GetShortPathName将verlongnamehere返回为verylo~1)。此外,GetFullPathName似乎正在使用某种全局状态等,使其非线程安全或可从 DLL 中使用。 -
@JoachimPileborg,GetLongPathName() 如何在不获取当前目录(“全局状态”)的情况下规范化相对路径?
标签: c++ windows winapi path relative-path