【发布时间】:2015-05-11 05:17:54
【问题描述】:
我有一个 Windows cpp 应用程序,我想在不更改当前目录的情况下解析相对于特定目录的路径。这意味着我不能使用GetFullPathName,因为它解析了相对于当前目录的路径。由于这是一个安全敏感问题,我宁愿不自己动手,而是使用经过批准的 API。
我四处寻找一个好的答案,但找不到任何东西。当然,这对于 Web 服务器或多线程环境来说是一个常见问题。其他人如何做到这一点?任何帮助将不胜感激。
例如:您从C:\appfolder\exes\myapp.exe 运行您的应用程序,而数据在C:\appfolder\data 中。我想将sillyfolder\..\mydata.txt 解析为C:\appfolder\data\mydata.txt。
【问题讨论】:
-
你能举个例子吗?
-
我不认为有这个 API。我相信通常的方法是将两个部分附加在一起(显然带有反斜杠)并以非规范形式留下路径。如果您知道该文件存在,我想您可以打开它然后调用 GetFinalPathNameByHandle。
-
@HarryJohnston,在连接绝对基目录和相对目录后,为什么不调用
GetFullPathName来删除任何"."和".."路径组件?如果您需要解析完整路径中的符号链接,GetFinalPathNameByHandle很有用,但您可能必须迭代回可以打开的路径组件,然后附加无法访问的其余路径(要么'不存在或您无权访问)。 -
@eryksun:
GetFullPathName的文档没有说明如果您将绝对路径传递给它会做什么(如果有的话)。 -
@HarryJohnston,缺少文档,例如他们没有讨论
L"con"如何变成L"\\\\.\\con",或者使用(和验证)环境变量(例如"=D:")作为驱动器相对路径。 ReactOS 在RtlGetFullPathName_UstrEx和RtlGetFullPathName_Ustr中对其中的一些进行了逆向工程。 FWIW,文档确实提供了 3 个示例:\\test-2\q$\lh、\\?\UNC\test-2\q$\lh和U:。
标签: c++ windows path relative-path msdn