cpp简单办法获取程序所在目录

⌚Time: 2024-11-15 18:05:00

👨‍💻Author: Jack Ge

如果要获取程序所在目录,在c++17的标准里有一个filesystem库可以用。通过这个库可以很方便的获取程序目录。父目录,程序名等信息。但是有的编译器不支持c++17

或者可以调用操作系统api来获取。windows系统和linux系统有不同的系统函数。这样很麻烦也不能跨平台。

最后有一个投机取巧的办法得知程序目录,就是检查main函数的argv[0]参数。就是程序路径。下面的这个函数就实现了获取程序所在目录。调用的时候参数1传入argv[0],参数2传入一个空数组。会写入程序目录


void get_program_dir(char *argv0,char dir[]){
    bool hasSeparator = false;
    unsigned int separatorPos = 0;
    for(int i=0;i<strlen(argv0);i++){
        if(argv0[i]=='\\'||argv0[i]=='/'){
            separatorPos = i;
            hasSeparator = true;
        }
    }
    strcpy(dir,argv0);
    if(hasSeparator == true){
        dir[separatorPos] = '\0';
    }
}

int main(int argc,char *argv[]){
    char dir[1024] = {0};
    get_program_dir(argv[0],dir);
    return 0;
}

这种办法在程序直接运行的时候获取的是程序的绝对路径。而如果是被其它程序调用,有可能获取到的是调用时的相对路径。比如

os.execute("./aaa/bbb/a.exe")

获取到的可能是./aaa/bbb