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

| 所以我运行我的应用程序。我需要它知道其可执行文件在哪里。如何使用Boost.Filesystem找到它的路径?     
已邀请:
如果您要从正在运行的可执行文件内部使用,则可以使用boost :: filesystem :: current_path()     
boost::filesystem::system_complete(argv[0]);
例如
[davka@bagvapp Debug]$ ./boostfstest 
/home/davka/workspaces/v1.1-POC/boostfstest/Debug/boostfstest
请注意,这为您提供了完整路径,包括可执行文件名。     
您不能,Boost.Filesystem不提供此类功能。 但是从Boost 1.61开始,您可以使用Boost.Dll和函数
boost::dll::program_location
#include <boost/dll.hpp>
boost::dll::program_location().parent_path();
    
您不能使用boost :: filesystem可靠地做到这一点。 但是,如果您在Windows上,则可以调用
GetModuleFileName
获取可执行文件的完整路径,然后使用
boost::filesystem
获取目录。 (请参见parent_path)     
如此处更全面的讨论,最可靠的方法不是通过boost :: filesystem。相反,您的实现应考虑应用程序运行所在的操作系统。 但是,为了快速实现而无需考虑可移植性,您可以检查argv [0]是否返回可执行文件的完整路径。如果为正,则可以执行以下操作:
namespace fs=boost::filesystem;

fs::path selfpath=argv[0];

selfpath=selfpath.remove_filename();
    
从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     

要回复问题请先登录注册