您的位置:首页 > 其它

MFC 获得当前exe文件的路径

2013-01-12 16:32 232 查看
在MFC编程中,有时候需要打开“当前exe文件所在目录中“的某些文件,或将文件写在当前exe所在目录下,那么怎么获得当前exe文件所在的路径呢?

在这里采用GetModuleFileName函数。

 

函数原型:
DWORD GetModuleFileName(
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize
);
 
函数参数说明:
1)hModule HMODULE 装载一个程序实例的句柄。如果该参数为NULL,该函数返回该当前应用程序全路径。
2)lpFileName
LPTSTR 是你存放返回的名字的内存块的指针,是一个输出参数
3)nSize DWORD ,装载到缓冲区lpFileName的最大值
 
函数返回值:
如果返回为成功,将在lpFileName的缓冲区当中返回相应模块的路径,如果所设的nSize过小,那么返回仅按所设置缓冲区大小返回相应字符串内容。
如果函数失败,返回值将为0,利用GetLastError可获得异常代码。
 
需要的头文件为:windows.h
 

实例:
假设exe文件名为”Test.exe“,将运行中的某个log文件保存在当前exe文件夹下,并改名为"Test_log.txt"
 

void CTestDlg::OnOK()

{

 CString strPath; 

 char cPath[MAX_PATH]; 

 //MAX_PATH是C语言运行时库中通过#define指令定义的一个宏常量,它定义了编译器所支持的最长全路径名的长度。 

 //在VC++6.0中, _MAX_PATH的值为260。

 

 if(!GetModuleFileName( NULL, cPath, MAX_PATH ))//获取路径。例如:cPath="E:\\Test.exe"  

 {  

  printf("GetModuleFileName failed (%d)\n", GetLastError());   

  return;  

 } 

 strPath=cPath;//将char型路径复制到cstring类型中。例如:strPath="E:\\Test.exe" 

 strPath=strPath.Left(strPath.GetLength()-4)+"_log.txt";//将原来路径减去最右边4个字符,即".exe",再加上"_log.txt".例如:strPath="E:\\Test_log.txt"

}

/* 如果想获得某个正在运行的EXE或者DLL的全路径可以这样写代码GetModuleFileNameEx(hProcess,hInst,lpFile,MAX_PATH);//注意下缓冲区就行了。*/

 

参考:http://baike.baidu.com/view/1285912.htm#6
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: