获取当前路径

本文介绍了在Windows环境下如何通过多种方式获取执行文件所在目录、当前工作路径,并提供了路径分解及修改当前工作目录的方法。

1. 获取执行文件所在目录 GetModuleFileName 

TCHAR modulePath[MAX_PATH];
GetModuleFileName(NULL, modulePath, MAX_PATH);
CString csPath(modulePath);
csPath = csPath.Left(csPath.ReverseFind(_T('\\')));

csPath = _T("\"") + csPath + _T("\\Te st\\TestPic.png") + _T("\"");  //两端加一组双引号把路径全包,防止路径有空格引发意外    生气

 GetModuleFileName原型:

    DWORD WINAPI GetModuleFileName( _In_opt_ HMODULE hModule, _Out_ LPTSTR lpFilename, _In_ DWORD nSize ); 

    返回值:Long,如执行成功,返回复制到lpFileName的实际字符数量;零表示失败。使用GetLastError可以打印错误信息。 

    参数: 

       hModule Long 一个模块的句柄。可以是一个DLL模块,或者是一个应用程序的实例句柄。如果该参数为NULL, 该函数返回该应用程序全路径。

       lpFileName String 指定一个字串缓冲区,要在其中容纳文件的用NULL字符中止的路径名,hModule模块就是从这个文件装载进来的 nSize Long 装载到         缓冲区lpFileName的最大字符数量


2. 获取当前工作路径1 GetCurrentDirectory 

TCHAR pFileName[MAX_PATH];
int nPos = GetCurrentDirectory( MAX_PATH, pFileName);
CString csFullPath(pFileName);
if( nPos < 0 ) 
   return CString("");
else 
  return csFullPath; 


GetCurrentDirectory函数原型:

    DWORD GetCurrentDirectory(DWORDnBufferLength,//sizeofdirectorybuffer LPTSTRlpBuffer//directorybuffer ); 

   返回值:

   Long,装载到lpBuffer的字节数。 如nBufferLength的长度不够,不足以容纳目录,则返回值是必要的缓冲区长度(要求至少这个长度), 其中包                      括空中止字符。零表示失败。会设置GetLastError。 

  参数表:

   nBufferLength Long,lpBuffer缓冲区的长度 lpBuffer String,指定一个预定义字串,用于装载当前目录。


注意:

    如果debug跟踪,获取的路径是工程文件(dsp)所在,因为当前工作路径就是工程路径 如果直接运行exe文件,获取的路径即exe所在路径。

补充知识:

     .dsp:VC开发环境生成的工程文件,文本格式。

     .dsw:VC开发环境生成的项目文件,用来把多个工程组织到一个项目中,文本格式。


3. 获取当前工作目录2 _getcwd (getcwd) 

<strong> </strong>   char path[_MAX_PATH]; 
    _getcwd(path,_MAX_PATH); //获取工作路径
    printf("当前工作目录:\n%s\n",path); 

    //额外加一个修改路径函数
    if((_chdir("d:\\visualc++"))==0) //修改工作路径
    {
         printf("修改工作路径成功\n"); 
        _getcwd(path,_MAX_PATH); 
          printf("当前工作目录:\n%s\n",path);
    } 
    else
    { 
           perror("修改工作路径失败"); exit(1);
     } 

修改当前工作路径意义请参见:http://bbs.csdn.net/topics/390871627


4. 路径分解函数: _splitpath

<span style="font-size:14px;">    char* cPath = "D:\\Projects\\AddQuoteForPath\\Debug\\AddQuoteForPath.exe";
    char drive[_MAX_DRIVE];//磁盘名 
    char dir[_MAX_DIR];//路径名 
    char fname[_MAX_FNAME];//文件名 
    char ext[_MAX_EXT];//扩展名 

    _splitpath(cPath, drive, dir, fname, ext );

    CString sDrive(drive);//磁盘名 
    CString sDir(dir);//文件路径 
    CString sFileName(fname);//取出文件路径后的文件名 
    CString sExt(ext);//文件扩展名</span>

 对应有:

 1、与之相反的为:_makepath,实现生成路径的功能。 

     _makepath( path_buffer, "c", "\\sample\\crt\\", "makepath", "cpp" ); 

     // c不需要加":",但是加多个例如"c::::" 或干脆为"cd"也未出错,应该是取开头第一个字符 

2、FindFirstFile函数:到一个文件夹(包括子文件夹)去搜索指定文件 。

       WIN32_FIND_DATA p; HANDLE h=FindFirstFile("e:\\test\\*.c",&p); puts(p.cFileName);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值