16

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

4

6 回答 6

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

例如

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

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

于 2011-04-17T15:20:41.617 回答
27

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

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

#include <boost/dll.hpp>
boost::dll::program_location().parent_path();
于 2018-03-12T01:58:49.337 回答
10

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

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

于 2011-04-17T15:28:10.780 回答
2

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

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

namespace fs=boost::filesystem;

fs::path selfpath=argv[0];

selfpath=selfpath.remove_filename();
于 2014-07-16T15:24:48.457 回答
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

于 2019-01-06T17:07:54.240 回答
-34

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

于 2011-04-17T14:55:10.253 回答