我试图在C ++中获取当前运行的文件名。我写了一个使用argv [0]和boost current_path()方法的简单代码。该文件被编译为可执行文件mainWindow。
#include "boost/filesystem.hpp"
int main(int argc, char* argv[])
{
boost::filesystem::path full_path( boost::filesystem::current_path() );
std::cout << full_path.string() << "\n";
std::cout << argv[0] << "\n\n";
return 0;
}
有趣的是,每种方法的输出都不同。
argv [0]输出为:
../ VENTOS / SRC / loggingWindow /主窗口
current_path()输出为:
/家庭/马尼/桌面/ VENTOS_Redpine
我没有直接从终端运行我的程序(mainWindow)。另一个应用程序是调用我的程序,我想这就是输出不同的原因。我是对的吗?
我的第二个问题是:不使用argv [0]选项并仅依赖于boost文件系统方法,如何获得与argv [0]相同的结果?
答案 0 :(得分:3)
argv[0]
仅包含用于执行程序的命令。这可能包含路径。它可能包含相对路径。它根本不包含任何路径。由于符号链接等,它甚至可能不包含可执行文件名称....如果托管系统选择不提供任何内容,它甚至可能是空的。它不可信,因此您不希望将其用作评估其他方法的基础。
boost::filesystem::current_path
使您失败,因为它只返回当前工作目录。这可能是也可能不是可执行文件的位置,因为它取决于运行程序的目录以及程序是否已更改工作目录。说实话,我不确定是否有一种确定的方法可以从Boost获取进程名称和路径。几年前没有,但是时间有一种进行的方式,你知道吗?
有很多问题涉及如何获取可执行文件和路径(Finding current executable's path without /proc/self/exe看起来很有希望但是过时了。那时候再次进行游戏。)但是所有都是特定于平台的,你可能需要做一些{{ 1}}或链接器魔法使这项工作。