我知道以前有人问过这个问题,但我仍然没有看到一个满意的答案,或者一个明确的“不,这不能做到”,所以我再问一次!
我要做的就是以独立于平台的方式获取当前运行的可执行文件的路径,可以是绝对路径,也可以是相对于调用可执行文件的位置。我虽然 boost::filesystem::initial_path 是我的麻烦的答案,但这似乎只处理问题的“平台无关”部分——它仍然返回调用应用程序的路径。
对于一些背景知识,这是一个使用 Ogre 的游戏,我正在尝试使用 Very Sleepy 对其进行分析,它从自己的目录运行目标可执行文件,所以当然在加载时游戏找不到配置文件等并立即崩溃.我希望能够将其传递给配置文件的绝对路径,我知道该配置文件将始终与可执行文件一起存在。在 Visual Studio 中进行调试也是如此——我希望能够运行 $(TargetPath) 而无需设置工作目录。
原文由 Ben Hymers 发布,翻译遵循 CC BY-SA 4.0 许可协议
我知道没有跨平台的方式。
对于 Linux:将
"/proc/self/exe"
传递给std::filesystem::canonical
或readlink
。Windows:将 NULL 作为模块句柄传递给
GetModuleFileName
。