c++如何获取可执行文件的当前路径_c++获取程序运行路径的方法

Windows使用GetModuleFileName获取路径,Linux通过readlink读取/proc/self/exe,跨平台可封装统一函数,注意区分可执行文件路径与当前工作目录。

c++如何获取可执行文件的当前路径_c++获取程序运行路径的方法

C++获取可执行文件当前路径的方法在不同操作系统下略有差异,下面介绍几种常见且实用的方式,适用于Windows和Linux平台。

1. Windows平台:使用GetModuleFileName

在Windows系统中,可以通过Windows API GetModuleFileName 获取当前可执行文件的完整路径,然后提取目录部分。

示例代码:

立即学习“C++免费学习笔记(深入)”;

#include windows.h>
#include
#include iostream>

std::string GetExecutablePath() {
    char buffer[MAX_PATH];
    GetModuleFileNameA(NULL, buffer, MAX_PATH);
    std::string fullPath(buffer);
    // 去掉文件名,保留路径
    size_t lastSlash = fullPath.find_last_of(“/”);
    if (lastSlash != std::string::npos) {
        return fullPath.substr(0, lastSlash);
    }
    return “”; // 异常情况
}

调用 GetExecutablePath() 即可获得程序所在目录。

2. Linux平台:读取/proc/self/exe符号链接

Linux系统中,每个进程的信息保存在/proc/[pid]/exe,其中/proc/self/exe指向当前程序的可执行文件路径。可以使用readlink函数读取该符号链接。

示例代码:

立即学习“C++免费学习笔记(深入)”;

#include
#include
#include
#include stream>

std::string GetExecutablePath() {
    char result[PATH_MAX];
    ssize_t count = readlink(“/proc/self/exe”, result, PATH_MAX);
    if (count != -1) {
        std::string fullPath(result, count);
        size_t lastSlash = fullPath.find_last_of(“/”);
        if (lastSlash != std::string::npos) {
            return fullPath.substr(0, lastSlash);
        }
    }
    return “”; // 失败
}

3. 跨平台封装建议

为了兼容多个平台,可以用宏判断操作系统,统一接口。#ifdef _WIN32
    #include windows.h>
#else
    #include
    #include
#endif

std::string GetCurrentExecutableDirectory() {
#ifdef _WIN32
    char buffer[MAX_PATH];
    GetModuleFileNameA(NULL, buffer, MAX_PATH);
    std::string path(buffer);
#else
    char result[PATH_MAX];
    ssize_t count = readlink(“/proc/self/exe”, result, PATH_MAX);
    std::string path(count == -1 ? “” : std::string(result, count));
#endif
    size_t pos = path.find_last_of(“/”);
    if (pos != std::string::npos) {
        return path.substr(0, pos);
    }
    return “.”;
}

4. 注意事项

获取的路径是程序启动时的可执行文件位置,不是当前工作目录(current working directory)。
当前工作目录可用getcwd()(Linux)或GetCurrentDirectory()(Windows)获取。
路径分隔符在不同系统中不同,处理时建议统一判断/

基本上就这些方法,根据目标平台选择合适实现即可。跨平台项目推荐封装统一函数。

以上就是c++++如何获取可执行文件的当前路径_c++获取程序运行路径的方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1481340.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 05:24:42
下一篇 2025年12月19日 05:24:58

相关推荐

发表回复

登录后才能评论
关注微信