提振.文件系统如何找出你的可执行文件在哪个目录
Boost.Filesystem how to find out in which directory your executable is?
所以我运行我的应用程序。我需要它知道它的可执行文件在哪里。如何使用Boost.Filesystem找到它的路径?
boost::filesystem::system_complete(argv[0]);
。
[davka@bagvapp Debug]$ ./boostfstest
/home/davka/workspaces/v1.1-POC/boostfstest/Debug/boostfstest
请注意,这给了您完整的路径,包括可执行文件名。
你不能,Boost。文件系统不提供这样的功能。
但是从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
如果您的意思是在您正在运行的可执行文件内部,您可以使用boost::filesystem::current_path()
相关文章:
- 提供变量作为 MATLAB 系统命令的输入参数,以便C++可执行文件
- 除了系统("pause")之外,是否有其他选项可以保持可执行文件打开?
- 我有一个预处理的 C/C++ 源文件 (cacti.i).如何从这个 .i 文件生成可执行二进制文件,以便我可以像 ./
- 应使用 CMake install 命令将可执行资源文件安装到何处?
- 为什么当我们想要运行可执行的 c++ 文件时,我们需要在可执行的 c++ 文件前面"./"?
- MinGW 编译的可执行文件与网络无法在 x64 系统上运行
- 如何告诉 clang 将调试符号放入可执行二进制文件中
- 如何从命令行运行可执行文件时启用系统错误消息
- 检测系统是否可以运行 amd64 可执行文件
- 在 Visual C++ 系统调用的路径中找不到可执行文件
- 使用系统命令调用可执行文件
- 系统调用 open() 创建可执行文件
- 从 Web UI 访问C++编译的可执行二进制文件
- Turbo C++系统函数运行一个可执行文件
- 使C可执行/设置文件在任何计算机上运行
- 如何使用自定义注册系统注册dll,并查看导入dll的可执行文件的PE
- 不是可执行格式:文件格式无法识别 GDB
- 如何制作不依赖于 .so 文件的可执行二进制文件
- 可执行测试文件没有运行测试
- 系统()调用批处理可执行流文件使程序在windows上重置