返回顶部

获取当前程序执行目录

1. 使用_getcwd()

std::string getModulePath()
{
    bool flag = false;
    std::string myStr;
    const int iLength = 1024;
    char ModulePath[iLength] = { 0 };
    char* path = nullptr;
    path = (char*)malloc(iLength * sizeof(char));
    path = _getcwd(ModulePath, iLength);
    if (NULL != path)
    {
        
        int len = strlen(ModulePath);
        for (int i = len - 1; i > 0; i--)
        {
            if (ModulePath[i] == '\\')
            {
                ModulePath[i + 1] = 0;
                flag = true;
                break;
            }
        }
    }
    free(path);
    if (!flag)
    {
        myStr = "";
    }
    myStr = ModulePath;
    
    return myStr;
}

 2. 使用GetModuleFileName(),第一个参数如果设置为NULL,返回的是开启线程的exe,如果采用下面的做法,返回的是当前模块的路径。

比如有一个exe调用了一个dll,exe在目录E:\Test\下,dll在E:\Test\test\下,那么参数设置为NULL,获取到的路径为E:\Test\,如果采用代码的写法,获取到的路径是E:\Test\test\

EXTERN_C IMAGE_DOS_HEADER __ImageBase;//申明为全局变量

std::string GetModulePath()
{
    
    int  i = 0;
    int  len = 0;
    bool flag = false;
    char ModulePath[1024] = { 0 };
    char path[1024] = { 0 };

    GetModuleFileName((HINSTANCE)&__ImageBase, ModulePath, 1024);//return  real  lenghth
    len = strlen(ModulePath);
    for (i = len - 1; i >= 0; i--)
    {
        if (ModulePath[i] == '\\')
        {
            ModulePath[i + 1] = 0;
            flag = true;
            strcpy(path, ModulePath);
            break;
        }
    }

    if (!flag)
    {
        strcpy(path, "");

    }
    std::string strPath(path);
    return strPath;
}

 

posted @ 2020-04-17 08:27  Zoya23  阅读(456)  评论(0编辑  收藏  举报