解析相对路径而不引用 Windows 上的当前目录



我有一个Windows cpp应用程序,我想在不更改当前目录的情况下解析相对于特定目录的路径。这意味着我不能使用GetFullPathName因为它解析相对于当前目录的路径。由于这是一个安全敏感问题,我宁愿不自己滚动,而是使用批准的API。

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

例如:您在数据处于C:appfolderdata时从C:appfolderexesmyapp.exe运行应用程序。我想解决sillyfolder..mydata.txt C:appfolderdatamydata.txt.

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

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

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

  • 应转换的给定目标路径
  • 作为当前目录的路径。

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

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

与 Unix 路径名不同(除了分隔符的"/"与"\"的含义),Windows 路径名具有其他复杂性:

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

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

最新更新