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

// 所有原创文章转载请注明作者及链接
//
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

// 函数 void get_exe_dir(TCHAR* pDir) { TCHAR szPath[_MAX_PATH]; TCHAR szDrive[_MAX_DRIVE]; TCHAR szDir[_MAX_DIR]; TCHAR szName[_MAX_FNAME]; TCHAR szExt[_MAX_EXT]; GetModuleFileName(NULL, szPath, _MAX_PATH); _tsplitpath_s(szPath, szDrive, _MAX_DRIVE, szDir, _MAX_DIR, szName, _MAX_FNAME, szExt, _MAX_EXT); _stprintf_s(pDir, _MAX_DIR, _T("%s%s"), szDrive, szDir); } // ... // 获得当前进程的可执行文件的所在目录 TCHAR szExeDir[_MAX_DIR] = {0}; get_exe_dir(szExeDir);

 

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

AnsiString sExeDir = ExtractFilePath(Forms::Application->ExeName);

 

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

你可能感兴趣的:(c,ext,null,exe,Path,Forms)