我可以建议PathCanonicalize吗?
我可以建议PathCanonicalize吗?
我找到了一篇博客文章,其中包含了我所见过的解决此问题的最全面,最精细的功能.它处理任何事情,甚至可怕的角落情况,例如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().