在不引用Windows上的当前目录的情况下解析相对路径

时间:2015-03-09 21:47:25

标签: c++ windows path relative-path msdn

我有一个Windows cpp应用程序,我想解析相对于特定目录的路径而不更改当前目录。这意味着我无法使用GetFullPathName,因为它解析了相对于当前目录的路径。由于这是一个安全敏感的问题,我宁愿不自己动手,而是使用受制裁的API。

我四处寻找一个好的答案,但找不到任何东西。当然,这是Web服务器或多线程环境的常见问题。其他人怎么做?任何帮助将不胜感激。

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

1 个答案:

答案 0 :(得分:-1)

标准(C ++或Win32)库似乎不会为您执行此操作。但是,建立相对路径是一个很好的练习。以下是一些有用的链接,了解如何启动(将脚本视为伪代码):

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

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

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

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

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

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

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