在不引用 Windows 上的当前目录的情况下解析相对路径
Resolving a relative path without referencing the current directory on Windows
我有一个 windows cpp 应用程序,我想在不更改当前目录的情况下解析相对于特定目录的路径。这意味着我不能使用 GetFullPathName
因为它解析相对于当前目录的路径。由于这是一个安全敏感问题,我宁愿不自己动手,而是使用经过批准的 API.
我四处寻找好的答案,但找不到任何东西。当然,这是 Web 服务器或多线程环境的常见问题。其他人如何做到这一点?任何帮助将不胜感激。
例如:您 运行 来自 C:\appfolder\exes\myapp.exe
的应用,而数据位于 C:\appfolder\data
。我想将 sillyfolder\..\mydata.txt
解析为 C:\appfolder\data\mydata.txt
。
标准(C++ 或 Win32)库似乎不会为您做这件事。但是创建相对路径是一个很好的练习。这里有一些有用的链接,可以了解如何开始(将脚本视为 伪代码 ):
- Converting an absolute path to a relative path
- Windows CMD: Get relative path from absolute path
- MakeRelative - makes a file name relative to a base path
将绝对路径名转换为相对路径需要
- 应该转换的给定目标路径
- 当前目录的路径。
转换将作为字符串操作完成:
- 首先找到以路径分隔符结尾的最长公共前缀。
- 如果没有共同的前缀,你就完成了
- 从(...的副本)当前和目标字符串中去除公共前缀
- 将 current 字符串中的每个目录名替换为“..”
- 在目标字符串前面添加(使用路径分隔符)
- return 组合字符串
与 Unix 路径名不同(除了“/”与“\”作为分隔符的意义之外),Windows 路径名具有额外的复杂性:
- 在同一台机器中,它们可以有设备名称(一个字母后跟一个“:”)
- UNC pathnames,以“\”开头。
对于后一种情况(UNC路径),如果current和target路径不在同一主机上,则相对路径毫无意义。然而,设备名和路径名并没有紧密地结合在一起(请注意 Windows 之后添加了使用 chdir 更改设备的能力,作为 option),并且根据应用程序,可以在两者之间创建相对路径名仅考虑路径部分的设备。
我有一个 windows cpp 应用程序,我想在不更改当前目录的情况下解析相对于特定目录的路径。这意味着我不能使用 GetFullPathName
因为它解析相对于当前目录的路径。由于这是一个安全敏感问题,我宁愿不自己动手,而是使用经过批准的 API.
我四处寻找好的答案,但找不到任何东西。当然,这是 Web 服务器或多线程环境的常见问题。其他人如何做到这一点?任何帮助将不胜感激。
例如:您 运行 来自 C:\appfolder\exes\myapp.exe
的应用,而数据位于 C:\appfolder\data
。我想将 sillyfolder\..\mydata.txt
解析为 C:\appfolder\data\mydata.txt
。
标准(C++ 或 Win32)库似乎不会为您做这件事。但是创建相对路径是一个很好的练习。这里有一些有用的链接,可以了解如何开始(将脚本视为 伪代码 ):
- Converting an absolute path to a relative path
- Windows CMD: Get relative path from absolute path
- MakeRelative - makes a file name relative to a base path
将绝对路径名转换为相对路径需要
- 应该转换的给定目标路径
- 当前目录的路径。
转换将作为字符串操作完成:
- 首先找到以路径分隔符结尾的最长公共前缀。
- 如果没有共同的前缀,你就完成了
- 从(...的副本)当前和目标字符串中去除公共前缀
- 将 current 字符串中的每个目录名替换为“..”
- 在目标字符串前面添加(使用路径分隔符)
- return 组合字符串
与 Unix 路径名不同(除了“/”与“\”作为分隔符的意义之外),Windows 路径名具有额外的复杂性:
- 在同一台机器中,它们可以有设备名称(一个字母后跟一个“:”)
- UNC pathnames,以“\”开头。
对于后一种情况(UNC路径),如果current和target路径不在同一主机上,则相对路径毫无意义。然而,设备名和路径名并没有紧密地结合在一起(请注意 Windows 之后添加了使用 chdir 更改设备的能力,作为 option),并且根据应用程序,可以在两者之间创建相对路径名仅考虑路径部分的设备。