C++获取程序运行目录

GetCurrentDirectory只是获取当前的目录,当计算机重新启动后,当前的路径一般为系统目录,因此系统启动后,使用该函数只能获取当前的目录,而不是应用程序所在的目录。建议使用GetModuleFileName函数,GetModuleFileName()是一个得到路径的API函数。本函数将这个API函数封装在其中,为的是简化调用的目的。当执行这个函数时,返回本程序所在的绝对路径,包括本程序的文件名。具体使用方法为://获取主程序所在路径,存在sPath中CStringsPath;GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);sPath.ReleaseBuffer();intnPos;nPos=sPath.ReverseFind('\\');sPath=sPath.Left(nPos);AfxMessageBox(sPath);在开发过程中经常需要获得程序当前的运行目录,这时就可以使用GetCurrentDirectory()和GetModuleFileName()函数,GetCurrentDirectory只是返回当前进程的当前目录,而并不是进程的镜像文件(.exe)所在的目录,GetCurrentDirectory()适用于XP等系统,,在WinCE上不能使用,GetModuleFileName()适用于WinCE2.0以后.函数说明:DWORDWINAPIGetModuleFileName(HMODULEhModule,LPTSTRlpFileName,DWORDnSize);函数功能此函数得到当前应用程序的运行目录,还包括应用程序的文件名。参数说明hModule:要获取文件名的模块名柄,可以是运用LoadLiberary得到的句柄,null表示当前模块lpFileName:输出参数,存放取得的文件名nSize:lpFileName参数的长度DWORDGetCurrentDirectory(DWORDnBufferLength,//sizeofdirectorybufferLPTSTRlpBuffer//directorybuffer);函数功能找到当前进程的当前目录参数说明nBufferLength:lpBuffer缓冲区的长度lpBuffer:指定一个预定义字串,用于装载当前目录返回值调用成功返回装载到lpBuffer的字节数。使用方法://下面的一段代码主要是获得当前程序的运行目录(.exe)所在的目录{CStringpath;GetModuleFileName(NULL,path.GetBufferSetLength(MAX_PATH+1),MAX_PATH);path.ReleaseBuffer();intpos=path.ReverseFind('\');path=path.Left(pos);}GetModuleFileName函数WINAPIDWORDGetModuleFileName(HMODULEhModule,LPWSTRlpFilename,DWORDnSize);GetBuffer和ReleaseBuffer是一套需要配合使用的函数,与GetBufferSetLength相比,优点是如果分配的空间大于实际保存的字符串(0结尾),ReleaseBuffer会把多余申请的空间释放,归还给系统;但使用时需要注意以下问题:如果要保存的字符串为abc(0结尾),则GetBuffer参数应至少为3;如果要保存的内容不是以0结尾,比如是读取文件数据,则GetBuffer参数如果大于文件长时,ReleaseBuffer参数一定要为文件长度(如果GetBuffer参数为文件长度的话不存在问题,ReleaseBuffer参数可以为默认-1)!GetBufferSetLength相对比较容易理解,它申请一个指定长度的空间,即使里面最终保存的字符串长度小于申请的空间长度,也不会将多余空间释放.调用示例:TCHAR*path=newTCHAR[MAX_PATH];ZeroMemory(path,MAX_PATH);//path=="d:ProjectTestMFCMFCdebug"GetCurrentDirectory(MAX_PATH,path);//path=="d:ProjectTestMFCdebugMFC.exe"GetModuleFileName(NULL,path,MAX_PATH);补充说明:如果想得到一个已经加载的DLL文件的路径,可以运用以下方法:charstrPath[MAX_PATH];GetModuleFileNameA(GetModuleHandle("你的DLL名字"),strPath,MAX_PATH);intj=strlen(strPath);for(j=strlen(strPath);strPath[j]!='\';j--);strPath[j]='';其中strPath即为你的DLL文件所在的目录

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?