获取调用文件的路径

Get path of file that is called

假设我有以下文件夹结构

/dir/dir2/dir3/program.exe

我想在调用时获取 program.exe 文件路径。例如

// program.exe
#include <iostream>
#include <filesystem>

int main(int argc, char** argv)
{
    std::cout << std::filesytem::current_path() << "\n";
}

但是如果从不同的位置调用,这个 program.exe 的工作方式会有所不同:

我希望我能获得 program.exe 确切路径 ,无论它是从哪个位置调用的。可能吗?
谢谢你的时间。

您正在查找包含工作可执行文件的文件夹。当前路径给你 process current directory

获取可执行路径

对于 Windows 你可以使用 GetModuleFileNameA Win API 函数:

例如:

char  exe_name[ MAX_PATH+1 ] = {'[=10=]'};
::GetModuleFileNameA(nullptr,exe_name,MAX_PATH);

对于POSIX你可以通过readlink系统调用

获取可执行路径

例如:

char  exe_name[ PATH_MAX+1 ] = {'[=11=]'};
char query[64] = {'[=11=]'};
std::snprintf(query, 64, "/proc/%u/exe", ::getpid() );
::readlink(query, exe_name, PATH_MAX);