【问题标题】:Get executable's path (with std::filesystem) [duplicate]获取可执行文件的路径(使用 std::filesystem)[重复]
【发布时间】:2019-09-22 17:54:17
【问题描述】:

在我被标记为重复之前,我能找到的所有类似问题在引入 std::filesystem 之前都有答案,并且可以使用特定于平台的代码或 Boost::filesystem。我正在寻找使用 std::filesystem 的便携式答案。


是否可以使用 std::filesystem 获取 c++ 可执行文件所在的路径(不是工作目录)?如果是,如何?

【问题讨论】:

  • 我找不到任何东西here。所以恐怕答案是,这是不可能的。
  • main函数的第二个参数(argv)呢?我不确定它的便携性。
  • @Kerndog73 除非使用完整路径调用程序,否则不会包含完整路径。
  • @Kerndog73 绝对不是 linux 系统。它只是在 shell 中输入的内容,或者在 UI 启动器中使用的内容。
  • 您可以使用std::filesystem 和当前目录以及argv[0] 获取绝对路径,但它仍然不是“可移植的”,因为在argv[0] 中没有说明argv[0] 中的内容@ 标准。

标签: c++ c++17 std-filesystem


【解决方案1】:

不,standard filesystem facilities 中没有提供任何内容来获取可执行文件的路径。

即使使用 1st argv argument 也不能保证包含可执行文件的完整路径。
我知道的系统只会传入用于启动程序的字符串。
考虑到这可以使用 PATH 环境变量来解决,因此无法保证,您会在那里看到完整的路径。

虽然有一些特定于操作系统的方法可以做到这一点:

【讨论】:

  • 您可以使用current_path 将相对路径解析为绝对路径。但即便如此,它也依赖于OS。虽然它应该适用于我认为的大多数系统。
  • @Galik 当前工作目录与可执行文件的路径完全无关。
  • 不是单独的。在某些情况下,您仍然需要将它与 PATH 结合使用。
猜你喜欢
  • 2014-09-21
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多