获取调用文件的路径
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
的工作方式会有所不同:
- 在
dir3
user@command_line:/dir/dir2/dir3$ ./program.exe
输出:"/dir/dir2/dir3"
- 在
dir2
user@command_line:/dir/dir2$ ./dir3/program.exe
输出:"/dir/dir2"
- 在
dir
user@command_line:/dir$ ./dir2/dir3/program.exe
输出:"/dir"
我希望我能获得 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);
假设我有以下文件夹结构
/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
的工作方式会有所不同:
- 在
dir3
user@command_line:/dir/dir2/dir3$ ./program.exe
输出:"/dir/dir2/dir3"
- 在
dir2
user@command_line:/dir/dir2$ ./dir3/program.exe
输出:"/dir/dir2"
- 在
dir
user@command_line:/dir$ ./dir2/dir3/program.exe
输出:"/dir"
我希望我能获得 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);