MFC获取系统当前目录

MFC中通常需要读取配置文件中的数据,这样在程序中就需要获取系统的当前目录。获取系统当前目录的代码网上很多,但是有各种限制(主要是不同的编译器的编码格式不同),在VS2005以及以上的版本编译不过,需要进行各种繁琐的字符串转换,关于字符串的转换问题后续再做总结。现总结了一种非常简单的实现方法,获取当前项目到DeBug目录下的路径(注:上述获取当前的工作目录在VS2005以及以上版本已验证有效)。

代码示例如下:

TCHARszPath[MAX_PATH];

GetModuleFileName(NULL, szPath, MAX_PATH);

CStringPathName(szPath);

//获取exe目录

CStringPROGRAM_PATH1 = PathName.Left(PathName.ReverseFind(_T('\\')) + 1);

执行到这一步,调试结果

PROGRAM_PATH1=D:\a\b\c\Debug\

 

CString PROGRAM_PATH2= PathName.Left(PathName.ReverseFind(_T('Debug')) );

执行到这一步,调试结果

PROGRAM_PATH2=D:\a\b\c\

 

PROGRAM_PATH2+=_T("MineSweeping\\Data\\Record.ini");

执行到这一步,调试结果

PROGRAM_PATH2=D:\a\b\c\MineSweeping\Data\Record.ini

注:这里的a,b,c是标识用的,重点是后面的字符串的经过拼接后的变化。

 

可以根据上面调试的结果信息自由选择Data文件夹的目录,存放在DeBug目录的下一级,也可以存放在与DeBug目录同级,根据自己情况选择。

另外,有一点需要注意的是,在用字符串表示目录时,如_T("MineSweeping\\Data\\Record.ini")要用\\ 其中前一个’\’是转义字符,不能只写 ‘\’ ,否则后果就是 D:\a\b\c\MineSweepingDataRecord.ini,这样是找不到Record.ini的,里面的数据也就无法读取。

这里再说一点,在MFC程序发布时,配置文件需要存放在Debug目录下,至于详细原因后续将会这对MFC程序发布问题在做总结。

 

在编程时还发现,针对获取当前路径MFC已经提供了一个函数:GetCurrentDirectory 这个函数VC声明如下:

DWORDGetCurrentDirectory(

                            DWORDnBufferLength,// sizeof directory buffer

                            LPTSTRlpBuffer // directory buffer

);

函数功能

获取当前进程的当前目录。

注意:当前目录这东西有点怪异,本来确实是可执行文件的所在目录,但是当用文件对话框成功打开一个文件后,该目录就被修改为被打开的文件所在目录。比如在程序中使用"123.txt"这样的文件名,希望将它存储在exe文件所在目录中,但是当用户用文件对话框打开一个文件"F:\456.txt"后,这个123.txt会被存储到F盘下。(VC2005下的情况,其他VC版本待验证)在VC2008中,特地调试一下,在构造函数正调用一个加载配置文件中数据的函数OnLoadConfig(),在这个函数中添加代码:

TCHARszPath[MAX_PATH];

       GetCurrentDirectory(MAX_PATH,szPath);//获取当前目录

CStringPathName(szPath);

调试程序后,发现szPath是当前运行的程序Debug的上一级级目录,因此在获取DeBug目录时,可以添加如下代码:

CStringPROGRAM_PATH = szPath;

PROGRAM_PATH+=_T("\\Debug\\Data\\Record.ini");

这样PROGRAM_PATH即为本地Record在本地的绝对路径。这里只需要注意路径路径变换的方法,再经过断点调

试,这两种方法都可以避免繁琐的字符串转换而获取路径。

参数说明

nBufferLength 缓冲区的长度

lpBuffer 指定一个预定义字串,用于装载当前目录

返回值

调用成功 返回装载到lpBuffer的字节数。

使用GetLastError函数可获得错误信息。

 



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法哥2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值