在 开发过程中经常需要获得程序当前的运行目录,这时就可以使用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. 【转】MFC获取程序目录路径方法

    原文网址:http://yeahyuanqing.blog.163.com/blog/static/118025091201149480818/ MFC获得当前应用程序目录的GetCurrentDir ...

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

    鸡啄米的这套VS2010/MFC编程入门教程到此就全部完成了,虽然有些内容还未涉及到,但帮助大家进行VS2010/MFC的入门学习业已足够.以此教程的知识为基础,学习VS2010/MFC较为深入的内容 ...

  3. ASP.NET网站中获取当前虚拟目录的应用程序目录的方法(转)

    [原创]ASP.NET网站中获取当前虚拟目录的应用程序目录的方法 ASP.NET网站中获取当前虚拟目录的应用程序目录的方法1.问题描述:有时候,某个网页控件会被不同目录下文件使用,此时如果该控件中有一 ...

  4. 用MFC时,如果程序崩溃,检查内存,然后注意GDI数量,在任务管理器里选项-查看列-GDI数量

    用MFC时,如果程序崩溃,检查内存,然后注意GDI数量,在任务管理器里选项-查看列-GDI数量

  5. MFC单文档程序结构

    MFC单文档程序结构三方面: Doc MainFrame View

  6. 可以把一堆dll文件放到程序目录下的一个自建目录里面

    窦宁波大哥哥的那篇文章的这种写法还是很有参考价值的. QString strLibPath(QDir::toNativeSeparators(QApplication::applicationDirP ...

  7. 打开win8及以上操作系统的系统已安装程序目录

    Windows 8 的“Metro 界面”里不能像XP和Win7那样,点击“开始”->“程序”,显示系统所有安装的程序,这个功能还是非常有用的,可以帮助我们快速查看系统已经安装的程序!我编写了这 ...

  8. SharePoint 2013 代码创建应用程序目录(App Catalog)

    众所周知,SharePoint App是2013版本的一大特色,那么,关于App的分发有几种方式呢?SharePoint给我们提供了两种方式,一种是上载到SharePoint应用商店,另一种是在本地S ...

  9. VC++ MFC SDI/MDI Ribbon程序的停靠窗格被关闭后如何再次显示

    VC++ 创建基于MFC的SDI应用程序,Visual Studio风格的主界面如下图所示,在该主界面上的视图菜单下包含有队对各个可停靠窗格显示或隐藏的控制菜单项.而基于Ribbon风格的应用程序,所 ...

随机推荐

  1. 剑指offer 面试6题

    面试6题: 题目:从尾到头打印链表 输入一个链表,从尾到头打印链表每个节点的值. 解题代码: # -*- coding:utf-8 -*- # class ListNode: # def __init ...

  2. android开发之网络棋牌类在线游戏开发心得(服务器端、Java) 好文章值得收藏

    标签: android服务器 2013-10-09 17:28 3618人阅读 评论(0) 收藏 举报 分类: android(11) 转自:http://blog.csdn.net/bromon/a ...

  3. springboot-vue项目前台2

    api_account.js import * as API from './' export default { //登录 login: params => { return API.POST ...

  4. 【HackerRank】Closest Numbers

    Sorting is often useful as the first step in many different tasks. The most common task is to make f ...

  5. linux ip别名和辅助ip地址

    转:https://blog.csdn.net/xiewen99/article/details/54729112?utm_source=itdadao&utm_medium=referral ...

  6. Windos Server Tomcat 双开配置

    Tomcat 双开配置 tomcat_1   server.mxl文件 # 修改端口 <Connector port=" protocol="HTTP/1.1" c ...

  7. this对象解析

    this在js中有着非常广泛的应用,但其所指的对象也常常让人摸不着头脑,简而言之: this指的就是调用函数的对象,最常见的莫过以下几种 1.直接使用函数,则为window对象 function a( ...

  8. cocos2dx打飞机项目笔记三:HeroLayer类和坐标系

    HeroLayer类主要是处理hero的一些相关东西,以及调用bulletLayer的一些方法,因为子弹是附属于hero的~~ HeroLayer 类的成员如下: class HeroLayer : ...

  9. Linux文件系统十问---深入理解文件存储方式(rhel6.5,EXT4)【转】

    本文转载自:https://blog.csdn.net/tongyijia/article/details/52832236 前几天在红黑联盟上看了一篇博客<Linux文件系统十问—深入理解文件 ...

  10. java Web 文件上传

    注意:请求实体过大的问题,请修改Nginx服务器的大小(百度参考413 Request Entity Too Large 的解决方法)jsp:<input type="file&quo ...