获取exe文件目录

时间:2022-05-16 12:06:42
    想要访问执行程序(.exe)路径下的文件,有以下几个步骤:
     1.先通过函数GetModuleFileName获取执行程序的绝对路径。
    TCHAR szPath[ MAX_PATH ] = {0};
    GetModuleFileName( NULL, szPath, MAX_PATH );
    其中GetModuleFileName函数为windows的API函数,使用的时候需要包含windows.h的头文件;MAX_PATH是一个宏定义,值为260。执行完GetModuleFileName函数之后,szPath数组中保存的就是执行程序当前的绝对路径。
假设执行程序xp.exe的绝对路径为C:\Program Files\Dll\xp.exe,那么szPath数组中存储的值就是C:\Program Files\Dll\xp.exe。
     2.根据执行程序的绝对路径得到需要访问的文件的绝对路径。
    这里需要用到_tcsrchr函数来将获取到的执行程序的绝对路径中的执行程序的名称去掉。即将上面路径C:\Program Files\Dll\xp.exe中的xp.exe去掉,只得到C:\Program Files\Dll\。方法如下:
    (_tcsrchr(szPath,_T('\\')))[1] = 0;
    注:_tcsrchr包含在头文件tchar.h中。
     3.将要访问的文件的名称添加到已经得到的路径中。
    假设需要访问的文件是1.txt,那么如下:
     CString strPath = szPath;
     strPath = strPath + "1.txt";
     在非MFC中,CString包含在atlstr.h头文件中(在vc6里没有,2003以后才有,所以在vc6中,用strcat代替),在MFC中包含在cstring.h的头文件中。
     程序整体如下:
     TCHAR szPath[ MAX_PATH ] = {0};
     if ( GetModuleFileName( NULL, szPath,MAX_PATH ) )
     {
      (_tcsrchr(szPath,_T('\\')))[1] = 0;

     }

     CString strPath = szPath;
     strPath = strPath + _T("1.txt");


    或者

       CString Result, sPath;  
Result = _T("");  
TCHAR sFileName[256];  
GetModuleFileName(AfxGetInstanceHandle(), sFileName, 255);  // 取得当前可执行文件的路径,保存在sFileName中  
sPath = sFileName;  
int index = sPath.ReverseFind('\\');                        // 逆向查找指定字符  
sPath = sPath.Left(index);  
Result = sPath + _T("\\1.txt");



FROM: http://blog.sina.com.cn/s/blog_780976a001015k1q.html

【说明】关于_tcsrchr一行代码

_tcsrchr  

 

 

查找字符串中某个字符最后一次出现的位置

两个参数

第一个参数:字符串

第二个参数:查找的字符

返回值:指向最后一次在字符串中出现的该字符的指针,如果要查找的字符再串中没有出现,则返回NULL。



今天看代码,突然看到了一句让我犯蒙的,一时间还没反应过来。

               代码是这样写的:  *_tcsrchrszPath_T'\\' ) ) = 0;

               仔细推敲了一下,这句代码其实可以分解为两句。 _tcsrchr( szPath, _T( '\\' ) )查找szPath中最后一个\所在的位置,并返回\以后的字符串。

*是取值操作,返回指针所指向地址的值,赋为0也就是将后面的字符串截断.

               还有一种写法,效果是一样的(_tcsrchr(szPath, _T('\\')))[1] = 0;

           

from:http://blog.csdn.net/zuiyuezhou888/article/details/7852472