在不引用Windows上的当前目录的情况下parsing相对path

我有一个Windows CPP应用程序,我想解决path相对于一个特定的目录,而不改变当前的目录。 这意味着我不能使用GetFullPathName因为它parsing了相对于当前目录的path。 由于这是一个安全敏感的问题,我宁愿不滚动自己的,但使用一个制裁的API。

我四处寻找一个很好的答案,但找不到任何东西。 这对于Web服务器或multithreading环境来说肯定是一个常见的问题。 其他人如何做到这一点? 任何帮助将不胜感激。

例如:当数据位于C:\appfolder\data时,从C:\appfolder\exes\myapp.exe运行应用程序。 我想将sillyfolder\..\mydata.txtparsing为C:\appfolder\data\mydata.txt

Solutions Collecting From Web of "在不引用Windows上的当前目录的情况下parsing相对path"

标准(C ++或Win32)库似乎不为你这样做。 但是做一个相对路径是一个很好的练习。 这里有几个有用的链接,看看如何开始(将脚本视为伪代码 ):

  • 将绝对路径转换为相对路径
  • Windows CMD:从绝对路径获取相对路径
  • MakeRelative – 相对于基本路径生成文件名

将绝对路径名转换为相对需要

  • 应该转换的给定目标路径
  • 一个是当前目录的路径。

转换将作为字符串操作完成:

  • 首先找到以路径分隔符结尾的最长的公共前缀。
  • 如果没有共同的前缀,你就完成了
  • 从当前字符串和目标字符串的(副本)中去除公共前缀
  • 当前字符串中的每个目录名替换为“..”
  • 在目标字符串前添加(使用路径分隔符)
  • 返回组合字符串

与Unix路径名不同(除了“/”和“\”分隔符),Windows路径名有其他复杂性:

  • 在同一台机器中,它们可以有设备名称(一个字母后跟一个“:”)
  • UNC路径名 ,以“\”开头。

对于后一种情况(UNC路径),如果当前路径和目标路径不在同一个主机上,则相对路径是没有意义的。 但是,设备名称和路径名并没有紧密地绑定在一起(请注意,Windows添加了使用chdir作为选项更改设备的功能),根据应用程序,可以通过仅考虑路径部分在设备之间创建相对路径名。