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

标签 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

最佳答案

标准(C++ 或 Win32)库似乎不会为您做这件事。但是创建相对路径是一个很好的练习。这里有一些有用的链接,可以了解如何开始(将脚本视为伪代码):

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

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

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

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

与 Unix 路径名(除了“/”与“\”作为分隔符的意义不同)不同,Windows 路径名具有额外的复杂性:

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

对于后一种情况(UNC 路径),如果当前目标 路径不在同一台主机上,那么相对路径就没有意义。然而,设备名称和路径名并没有紧密地结合在一起(请注意,Windows 添加了使用 chdir 更改设备的能力,作为 option ),并且根据应用程序,可以通过仅考虑路径来在设备之间创建相对路径名部分。

关于c++ - 在不引用 Windows 上的当前目录的情况下解析相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28952366/

相关文章:

c++ - 在 COM IDL 中如何从 COM 依赖引用枚举?

c++ - 对 `yylex' 的 undefined reference

windows - 了解 NDIS 虚拟微型端口驱动程序

java - toRealPath 方法的行为(类 java.nio.file.Path)

c# - 路径问题 C#.net Image

c++ - 通知线程有关变量(信号?)的变化

c++ - 在 64 位和 32 位窗口中读取注册表

windows - mingw make 无法处理路径中的空格?

c# - 连续页面 Crystal 报表查看器

python - 本地主机网络应用程序。获取浏览器中文件的完整路径