我有一个 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
将绝对路径名转换为相对路径需要
- 应转换的给定目标路径
- 当前目录的路径。
转换将作为字符串操作完成:
- 首先找到以路径分隔符结尾的最长公共(public)前缀。
- 如果没有共同的前缀,你就完成了
- 从(...的拷贝)当前和目标字符串中去除公共(public)前缀
- 将当前字符串中的每个目录名替换为“..”
- 在目标字符串前添加(使用路径分隔符)
- 返回组合后的字符串
与 Unix 路径名(除了“/”与“\”作为分隔符的意义不同)不同,Windows 路径名具有额外的复杂性:
- 在同一台机器内,它们可以有设备名称(一个字母后跟一个“:”)
- UNC pathnames , 以“\”开头。
对于后一种情况(UNC 路径),如果当前 和目标 路径不在同一台主机上,那么相对路径就没有意义。然而,设备名称和路径名并没有紧密地结合在一起(请注意,Windows 添加了使用 chdir 更改设备的能力,作为 option ),并且根据应用程序,可以通过仅考虑路径来在设备之间创建相对路径名部分。
关于c++ - 在不引用 Windows 上的当前目录的情况下解析相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28952366/