获得当前进程的可执行程序所在的目录

来源:互联网 发布:荣耀9比8好在哪里知乎 编辑:程序博客网 时间:2024/05/17 02:13

// 所有原创文章转载请注明作者及链接
//
blackboycpp(AT)gmail.com
// QQ群: 135202158

 

 

 

有时我们需要获得当前执行程序所在的目录.
在这种情况下, 不要相信GetCurrentDirectory()函数所得到的目录,
它只是当前工作目录, 而并非exe程序所在目录. 这种情况一般发生在:

    当你在D:/dev/下有一个程序DoFile.exe, 而这个程序会处理E:/file/data.dat,
那么, 在程序执行的某个时刻, 你调用GetCurrentDirectory()函数获得的目录,
实际上是 E:/file, 而非D:/dev. 如果我们需要在程序中调用一些可执行程序目录
下的资源, 比如ini, cfg文件等等, 就会出现错误..

以下代码说明了如何在Visual C++下获得可执行程序的准确目录(当然C++ Builder也支持这种方式):

1. // 更新于2012.1.12

TCHAR szExePath[_MAX_PATH] = {0};if(::GetModuleFileName(NULL, szExePath, _MAX_PATH) >  0){int c = _T('\\');*_tcsrchr(szExePath, c) = _T('\0');}


2.old

 

而对于C++ Builder, 利用VCL提供的功能, 可轻松获得:

 

需要注意的是, 前者获得的路径包含/, 后者不包含.