//获取当前前后相继的总体路径,包含程序名  
  CString   szPath;  
  GetModuleFileName(NULL,szPath.GetBuffer(MAX_PATH),MAX_PATH);  
  szPath.ReleaseBuffer();  
   
  //不包涵程序名 ,可放在你的APP文件类里面 
  CString   CXXXXXXApp::GetCurDir()  
  {  
    TCHAR   sDrive[_MAX_DRIVE];  
    TCHAR   sDir[_MAX_DIR];  
    TCHAR   sFilename[_MAX_FNAME],Filename[_MAX_FNAME];  
    TCHAR   sExt[_MAX_EXT];  
    GetModuleFileName(AfxGetInstanceHandle(),   Filename,  
_MAX_PATH);  
    _tsplitpath(Filename,   sDrive,   sDir,   sFilename,   sExt);  
    CString   homeDir(CString(sDrive)   +   CString(sDir));  
    int   nLen   =   homeDir.GetLength();  
    if(homeDir.GetAt(nLen-1)   !=   _T(‘\’))  
      homeDir   +=   _T(‘\’);  
    return   homeDir;  
  }
其中:void   _splitpath(  
        const   char   *path,  
        char   *drive,  
        char   *dir,  
        char   *fname,  
        char   *ext    
  );  
  void   _wsplitpath(  
        const   wchar_t   *path,  
        wchar_t   *drive,  
        wchar_t   *dir,  
        wchar_t   *fname,  
        wchar_t   *ext    
  );  

直白上代码:

先前也写过深入分析程序运转路径的博文 ,但明天不时发掘存更加好的函数能够扶植大家解析路线参数。这几个函数便是_splitpath。
函数原型:
void _splitpath(
   const char *path,
   char *drive,
   char *dir,
   char *fname,
   char *ext
);
void _wsplitpath(
   const wchar_t *path,
   wchar_t *drive,
   wchar_t *dir,
   wchar_t *fname,
   wchar_t *ext
);
参数含义:
path
Full path buffer. _makepath does not check that path does not exceed
_MAX_PATH.
drive
Drive letter.
dir
Directory path.
fname
File name.
ext
File name extension.
实例:
[cpp]
1. #include <stdlib.h>  
2. #include <stdio.h>  
3. #include <string.h>  
4. int main( void ) 
5. { 
6.    char path_buffer[_MAX_PATH]; 
7.    char drive[_MAX_DRIVE]; 
8.    char dir[_MAX_DIR]; 
9.    char fname[_MAX_FNAME]; 
10.    char ext[_MAX_EXT]; 
11.  
12.    //获取当前运维程序的豆蔻年华体化路线,赋值给path_buffer  
13.    strcpy(path_buffer,__argv[0]); 
14.    _splitpath( path_buffer, drive, dir, fname, ext );  
15.    // Note: _splitpath is deprecated; consider using _splitpath_s
instead  
16.    printf( “Path extracted with _splitpath:n” ); 
17.    printf( ”  Drive: %sn”, drive ); 
18.    printf( ”  Dir: %sn”, dir ); 
19.    printf( ”  Filename: %sn”, fname ); 
20.    printf( ”  Ext: %sn”, ext ); 
21.  
22.    return 0; 
23. } 
 
运作结果:

//拿到程序当前的门道  
  char   szWorkDir[256];  
  _getcwd(   szWorkDir,   256   );

///////查看实施文书的门路下边是还是不是有db文件夹,若未有则新建/////////

  图片 1

CFileFind cff;
if (cff.FindFile(_T(“db”卡塔尔国卡塔尔国 == 0卡塔尔     //当前路径,没找到db文件夹
{
  CString strText;
  TCHAR exepath[MAX_PATH]={0};
  ::GetModuleFileName(NULL,exepath,MAX_PATH);   //获取exe路径,存于exepath中
  strText=exepath;                  
  strText =
strText.Left(strText.ReverseFind(‘\’State of Qatar卡塔尔国;   //找到路线中尾数第七个/,并将其背后的字符掐掉,注意转义字符的发挥\
  strText += _T(“\”);
  strText += _T(“db”卡塔尔(قطر‎;      //新的路径,新的文书名
CreateDirectory(strText,NULL); // 生成db文件夹
}

摘自  听君一席谈胜读十年书 

 

,但今日偶然发掘存越来越好的函数能够扶持大家深入分析路线参数。这些函数…

以下为转发,未核查

  1. 得到Debug或Release所在的门径
    CString GetModuleDir() 

     HMODULE module = GetModuleHandle(0); 
     char pFileName[MAX_PATH]; 
     GetModuleFileName(module, pFileName, MAX_PATH); 
     
     CString csFullPath(pFileName); 
     int nPos = csFullPath.ReverseFind( _T(‘\’) ); 
     if( nPos < 0 ) 
      return CString(“”); 
     else 
      return csFullPath.Left( nPos ); 
    }

  2. 获取当前事业路线(dsp所在渠道)

//获取工作路线
CString GetWorkDir() 
{  
 char pFileName[MAX_PATH]; 
 int nPos = GetCurrentDirectory( MAX_PATH, pFileName); 
 
 CString csFullPath(pFileName);  
 if( nPos < 0 ) 
  return CString(“”); 
 else 
  return csFullPath; 
}

以下为转发,未核实

C/MFC怎么样获得应用程序当前路径(收拾)

第风流倜傥种艺术:

DWORD GetCurrentDirectory(
  DWORD nBufferLength,  // size, in characters, of directory buffer
  LPTSTR lpBuffer       // pointer to buffer for current directory
);
BOOL SetCurrentDirectory(
  LPCTSTR lpPathName   // pointer to name of new current directory
);
第二种方法

用GetModuleFileName获得应用程序的公文名(第贰个参数为NULL卡塔尔
再用_splitpath分析文件名获得路径

例如:

//获得当前路径
 /*char buf[100];
 GetCurrentDirectory(sizeof(buf),buf);
 MessageBox(buf);
 HINSTANCE hInst=NULL;
 hInst=AfxGetApp()->m_hInstance;
 char path_buffer[_MAX_PATH];
 GetModuleFileName(hInst,path_buffer,sizeof(path_buffer卡塔尔(قطر‎);//得到exe文件的全路线
 //分离路径和文书名。
    char drive[_MAX_DRIVE];
    char dir[_MAX_DIR];
    char fname[_MAX_FNAME];
    char ext[_MAX_EXT];
 _splitpath( path_buffer, drive, dir, fname, ext );
 CString Path;
 Path.Format(“%s%s”,drive,dir);

char path[300];

strcpy(path,drive);
strcat(path,dir);

又或:

TCHAR exeFullPath[MAX_PATH];
    CString strPath;
    GetModuleFileName(NULL,exeFullPath,MAX_PATH);
    strPath=(CString)exeFullPath;
    int position=strPath.ReverseFind(‘\’);
    strPath=strPath.Left(position+1); 

    TCHAR FilePath[MAX_PATH];
    GetModuleFileName(NULL,FilePath,MAX_PATH);
    (_tcsrchr(FilePath,’\’))[1] = 0; 
    lstrcat(FilePath,_T(“MY.ini”)); 

其三种方式:

VC中__argv[0]能够拿到exe的程序名,然后用_splitpath能够解释获得程序路线。

第三种艺术

#include<direct.h>

char buf[_MAX_PATH];

_getcwd(buf,_MAX_PATH);

第四种是收获操作系统所在的目录

char buf[100];
 GetSystemDirectory(buf,100);
 MessageBox(buf);

 

以下未审验