您的位置:首页 > 其它

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

2009-12-10 18:37 423 查看
// 所有原创文章转载请注明作者及链接

// 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);




需要注意的是, 前者获得的路径包含/, 后者不包含.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: