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

时间:2011-04-17 14:52:22

标签: c++ boost boost-filesystem

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

6 个答案:

答案 0 :(得分:34)

boost::filesystem::system_complete(argv[0]);

e.g。

[davka@bagvapp Debug]$ ./boostfstest 
/home/davka/workspaces/v1.1-POC/boostfstest/Debug/boostfstest

请注意,这会为您提供的完整路径,包括可执行文件名。

答案 1 :(得分:15)

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

但是从Boost 1.61开始,您可以使用Boost.Dll并运行boost::dll::program_location

#include <boost/dll.hpp>
boost::dll::program_location().parent_path();

答案 2 :(得分:10)

你无法使用boost :: filesystem可靠地完成它。

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

答案 3 :(得分:2)

正如更全面地讨论here,最可靠的方法不是通过boost :: filesystem。相反,您的实现应考虑运行应用程序的操作系统。

但是,对于没有可移植性问题的快速实现,您可以检查argv [0]是否返回可执行文件的完整路径。如果是肯定的,你可以这样做:

namespace fs=boost::filesystem;

fs::path selfpath=argv[0];

selfpath=selfpath.remove_filename();

答案 4 :(得分:1)

从C ++ 14开始,您不需要Boost,可以使用标准库的文件系统,您可以轻松地做到这一点: (我可以确认这也适用于Windows和Linux)

#include <iostream>
#include <filesystem>
namespace fs = std::experimental::filesystem;
int main()
{
    fs::path p = argv[0]; // or "C:executable_name.exe";
    std::cout << "Current path is " << fs::current_path() << '\n'
              << "Absolute path for " << p << " is " << fs::absolute(p) << '\n'
          << "System complete path for " << p << " is " << fs::system_complete(p) << '\n';
}

从文档中复制的示例:https://en.cppreference.com/w/cpp/experimental/fs/absolute

答案 5 :(得分:-25)

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