Boost.Filesystem如何找出你的可执行文件在哪个目录下?

Rel*_*lla 14 c++ boost boost-filesystem

所以我运行我的应用程序.我需要知道它的可执行文件在哪里.如何使用Boost.Filesystem找到它的路径?

dav*_*vka 35

boost::filesystem::system_complete(argv[0]);
Run Code Online (Sandbox Code Playgroud)

例如

[davka@bagvapp Debug]$ ./boostfstest 
/home/davka/workspaces/v1.1-POC/boostfstest/Debug/boostfstest
Run Code Online (Sandbox Code Playgroud)

请注意,这将为您提供包含可执行文件名的完整路径.

  • 由于它依赖于搜索路径,因此可能会以多种方式失败. (4认同)
  • 如果你有`chdir`到另一个目录,你的应用程序是通过相对路径运行,如`./ myapp`,它将无法工作. (3认同)
  • @Nim:这有点迟钝 - "path"已经有一个[`parent_path()`](http://www.boost.org/doc/libs/release/libs/filesystem/v3/doc/reference.html #path-parent_path)成员函数. (2认同)

Sta*_*irl 17

你不能,Boost.Filesystem不提供这样的功能.

但是从Boost 1.61开始,你可以使用Boost.Dll和函数boost::dll::program_location:

#include <boost/dll.hpp>
boost::dll::program_location().parent_path();
Run Code Online (Sandbox Code Playgroud)


f4.*_*f4. 10

你不能用boost :: filesystem可靠地做到这一点.

但是,如果您在Windows上,则可以调用GetModuleFileName以获取可执行文件的完整路径,然后使用它boost::filesystem来获取目录.(见parent_path)


Ral*_*alf -34

如果您的意思是从正在运行的可执行文件内部,您可以使用boost::filesystem::current_path()

  • 如果程序目录与当前工作目录不同,这将不起作用。例如,考虑一个以这种方式从 shell 启动的程序:`./foo/program`。 (26认同)
  • 很好的例子,说明糟糕的答案如何在网站上被接受 (7认同)