获取当前程序执行目录
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; }