在 Linux 中使用 realpath 将相对路径更改为 C++ 中的绝对路径

Change relative path to absolute path in C++ using realpath in Linux

本文关键字:路径 C++ 相对 Linux realpath      更新时间:2023-10-16

我需要在 C++ 年将相对路径更改为 linux 中的绝对路径。我正在使用真实路径,但输出是错误的!

char resolved_path[200];
realpath("$HOME/Desktop/SumoSVN/bin", resolved_path);
cout << resolved_path << endl;

我希望得到这个输出:/home/mani/Desktop/SumoSVN/bin

但我得到了这个!:/home/mani/Desktop/VENTOS/$HOME

我做错了什么?

shell 或环境变量 (参见 environ(7)) 不会被 realpath(3) 扩展。你需要调用 getenv(3)。你可以试试

std::string homedir(getenv("HOME"));
realpath((homedir+"/Desktop/SumoSVN/bin").c_str(), resolved_path);

参见 wordexp(3) (也许还有 glob(3))。阅读path_resolution(7)和glob(7)。请注意,扩展命令参数的是 shell。

顺便说一句,当前目录是由 getcwd(3) 获取的。

附言。在某些具有不同语言的安装中,Desktop不存在:例如,它变成了 Bureau在法国Debian或Ubuntu或Mint系统上