在 开发过程中经常需要获得程序当前的运行目录,这时就可以使用GetCurrentDirectory()和GetModuleFileName()函 数,GetCurrentDirectory只是返回当前进程的当前目录,而并不是进程的镜像文件(.exe)所在的目 录,GetCurrentDirectory()适用于XP等系统,,在WinCE上不能使用,GetModuleFileName()适用于 WinCE2.0以后.

函数说明:

DWORD WINAPI GetModuleFileName(
HMODULE hModule,
LPTSTR lpFileName,
DWORD nSize
);
函数功能
  此函数得到当前应用程序的运行目录,还包括应用程序的文件名。 
参数说明
  hModule:要获取文件名的模块名柄,可以是运用LoadLiberary得到的句柄,null表示当前模块 
  lpFileName:输出参数,存放取得的文件名 
  nSize:lpFileName参数的长度

DWORD GetCurrentDirectory(
   DWORD nBufferLength, // size of directory buffer
   LPTSTR lpBuffer // directory buffer 
   ); 
函数功能
 找到当前进程的当前目录 
参数说明
  nBufferLength:lpBuffer缓冲区的长度 
  lpBuffer:指定一个预定义字串,用于装载当前目录 
返回值 
 调用成功 返回装载到lpBuffer的字节数。

使用方法:
//下面的一段代码主要是获得当前程序的运行目录(.exe)所在的目录
{
    CString path; 
    GetModuleFileName(NULL,path.GetBufferSetLength(MAX_PATH+1),MAX_PATH); 
    path.ReleaseBuffer(); 
    int pos = path.ReverseFind('\\'); 
    path = path.Left(pos); 
}

GetModuleFileName函数

WINAPI DWORD GetModuleFileName( 
HMODULE hModule,
LPWSTR lpFilename
DWORD nSize
);

GetBuffer和ReleaseBuffer是一套需要配合使用的函数, 与GetBufferSetLength相比, 优点是如果分配的空间大于实际保存的字符串(0结尾),ReleaseBuffer会把多余申请的空间释放, 归还给系统; 但使用时需要注意以下问题: 如果要保存的字符串为abc(0结尾),则GetBuffer参数应至少为3; 如果要保存的内容不是以0结尾, 比如是读取文件数据, 则GetBuffer参数如果大于文件长度时,ReleaseBuffer参数一定要为文件长度(如果GetBuffer参数为文件长度的话不存在问题,ReleaseBuffer参数可以为默认-1)! GetBufferSetLength相对比较容易理解, 它申请一个指定长度的空间, 即使里面最终保存的字符串长度小于申请的空间长度, 也不会将多余空间释放.

调用示例:
TCHAR *path = new TCHAR[MAX_PATH];
ZeroMemory(path, MAX_PATH);
// path == "d:\Project\Test\MFC\MFC\debug"
GetCurrentDirectory(MAX_PATH, path);
// path ==  "d:\Project\Test\MFC\debug\MFC.exe"
GetModuleFileName(NULL,path,MAX_PATH);

补充说明:
如果想得到一个已经加载的DLL文件的路径,可以运用以下方法:
char  strPath[MAX_PATH];   
GetModuleFileNameA(GetModuleHandle("你的DLL名字"),strPath,MAX_PATH);
int j=strlen(strPath);
for(j=strlen(strPath);strPath[j]!='\\';j--);
strPath[j]='\0';  
其中strPath即为你的DLL文件所在的目录

MFC获得当前应用程序目录的GetCurrentDirectory()和GetModuleFileName()函数相关推荐

  1. c#获取应用程序目录

    string str1 =Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件名.   string str2=Enviro ...

  2. 获取和设置c# 应用程序目录

    string str1 =Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件名.   string str2=Enviro ...

  3. MFC80.DLL复制到程序目录中,也有的说复制到安装目录中

    在用VS2005学习C++调试程序的时候,按F5键,总提示这个问题, 不晓得什么原因,网上有的说找到MFC80.DLL复制到程序目录中,也有的说复制到安装目录中,可结果很失望,也有的VS2005安装有 ...

  4. MFC制作Windows画图程序(二)

    继<MFC制作Windows画图程序(一)> 文章目录 7 颜色填充功能 8 选择画笔颜色 9 设置画笔粗细 10 将绘制出来的图形保存的实现 11 添加位图 7 颜色填充功能 油漆桶功能 ...

  5. VS2010/MFC编程入门教程之目录和总结

    写这套VS2010/MFC编程入门教程历时八个月,时间比较长,都是鸡啄米在工作之余加班加点完成的.虽然有点累,但看到有这么多人过来支持鸡啄米,很是值得. 写每节教程我都力求讲明白,深入浅出的阐述每个知 ...

  6. VS2010/MFC 编程入门教程之目录和总结

    [原地址]:http://www.jizhuomi.com/software/257.html 鸡啄米这个网站不是很了解,但确实有很多好文章.自己工作需要,在vs2010 下学习mfc的知识,发现了这 ...

  7. c++程序目录结构_C程序结构

    C程序结构 进入我们的编程入门程序Hello world实例: C 程序主要包括以下部分: 预处理器指令 函数 变量 语句 & 表达式 注释 输出hello world程序: #include ...

  8. 关于python中程序流程结构-四、python基础(程序目录结构规范)

    程序目录结构: 设计一个层次清晰的目录结构,就是为了达到以下两点: 可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等.从而非常快速 ...

  9. 【Android 逆向】Android 系统文件分析 ( 外部存储设备文件 | sbin 命令程序目录 | dev 字符设备目录 )

    文章目录 一.外部存储设备文件 二.sbin 命令程序目录 三.dev 字符设备目录 一.外部存储设备文件 /sdcard 文件是一个链接 , 相当于快捷方式 , 其实际的目录是 /storage/s ...

最新文章

  1. Ubuntu 修改本地磁盘名称
  2. 第6章——广度优先搜索
  3. C++智能指针及其简单实现
  4. 一些关于机器学习的网站总结
  5. mongodb 安装启动
  6. LockSupport的源码实现原理以及应用
  7. 判断是否为IE浏览器(方法一)
  8. 如何开启jvm日志_直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详解...
  9. java8 朗姆表达式,java同步数据库时间问题[问题点数:20分,结帖人vtison]
  10. aix oracle 10.2.0.1 升级 10.2.0.4,install oracle 10r2 for aix
  11. ios apns netty java codec 防止粘包
  12. java jmx 监控tomcat_jmx监控之Tomcat
  13. 【数字信号处理】基于matlab GUI数字信号处理系统【含Matlab源码 1088期】
  14. 正则表达式--简单记忆一
  15. 国内博客搬家工具大全
  16. word文档怎么在左侧显示目录?
  17. 火车票能不能选座_电话订火车票可以自己选座位吗
  18. 学生用计算机隐藏功能,学生计算器怎么去掉d
  19. 微信公众号注册时提示该主体注册数量已超过上限怎么办?
  20. Windows NDK安装及开发

热门文章

  1. CAN总线抗干扰的六种解决方案
  2. iview 下拉select样式_Vue.js相关:iview实现select tree树形下拉框的示例代码
  3. 直播画面抖动_罗永浩直播带货1.1个亿,企业想玩网络直播,三大专业设备你必须知道...
  4. csgo一键跳投_个人csgo单练cfg参数和投掷物,附带一期叉车教学,萌新佛系休闲党必备...
  5. 三调地类代码_FME实现三调地类变化流量表制作
  6. axure 小程序 lib_详细揭秘微信小程序框架技术——Mpx
  7. GD32如何替换STM32?
  8. 如何测量程序运行时间?
  9. 电子工程师,学会阅读Datasheet很重要!
  10. 最新 | 2018年无人机研发热点