当前位置:  开发笔记 > 编程语言 > 正文

使用WinAPI规范化文件路径

如何解决《使用WinAPI规范化文件路径》经验,为你挑选了2个好方法。

我可以建议PathCanonicalize吗?



1> i_am_jorf..:

我可以建议PathCanonicalize吗?


在查看了这个答案之后,我尝试使用PathCanonicalize()并发现它被破坏了.`PathCanonicalize("../ foo.txt")`总是返回`/ foo.txt`!PathCanonicalize()只对字符串进行简单的编辑,上面的破坏是记录的行为.无用.我将用我发现的内容发布另一个答案.

2> steveha..:

我找到了一篇博客文章,其中包含了我所见过的解决此问题的最全面,最精细的功能.它处理任何事情,甚至可怕的角落情况,例如V:foo.txt你使用subst命令映射V:到的地方,Z:但你已经习惯subst映射Z:到其他驱动器; 它会循环,直到所有subst命令都被解开.网址:

http://pdh11.blogspot.com/2009/05/pathcanonicalize-versus-what-it-says-on.html

我的项目是纯C代码,该函数是C++.我开始翻译它,但后来我发现我可以通过一个函数调用得到我想要的规范化路径:GetLongPathName().这不会处理可怕的角落案件,但它处理了我的迫切需要.

我发现GetLongPathName("foo.txt")只是返回foo.txt,但只是通过./在文件名前加上我得到了规范化形式的扩展:

GetLongPathName("./foo.txt"),如果在目录中执行C:\Users\steveha,则返回C:\Users\steveha\foo.txt.

所以,在伪代码中:

如果路径名的第二个字符是':'或第一个字符是'/'或'\',只需调用GetLongPathName()else,将"./"复制到临时缓冲区,然后将文件名复制到临时缓冲区+ 2 ,获取前缀为"./"的文件名副本,然后调用GetLongPathName().

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有