MFC学习笔记——读写配置文件(.ini)和注册表

(一)配置文件(.ini)

配置文件中经常用到ini文件,在VC中其函数分别为:

//写入.ini文件:
bool WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString,LPCTSTR lpFileName);

各参数含义如下:
LPCTSTR lpAppName ——– INI文件中的一个字段名
LPCTSTR lpKeyName ——– lpAppName 下的一个键名,也就是里面具体的变量名
LPCTSTR lpString ——— 是键值,也就是变量的值, 必须为LPCTSTR或CString类型
LPCTSTR lpFileName ——– 完整的INI文件路径名

//读取.ini文件:
DWORD GetPrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpDefaut,LPSTR lpReturnedString,DWORD nSize,LPCTSTR lpFileName);

各参数含义如下:
LPCTSTR lpAppName ——– INI文件中的一个字段名
LPCTSTR lpKeyName ——– lpAppName 下的一个键名,也就是里面具体的变量名
LPCTSTR lpDefaut ——— 如果没有其前两个参数值,则将此值赋给变量
LPSTR lpReturnedString ——– 接收INI文件中的值的CString对象,即接收缓冲区
DWORD nSize —— 接收缓冲区的大小
LPCTSTR lpFileName ——– 完整的INI文件路径名

//读取整形值:
UINT GetPrivateProfileInt(LPCTSTR lpAppName,LPCTSTR lpKeyName,INT nDefault,LPCTSTR lpFileName);

例子:
写入:

CString StrName,Strtemp;
int nAge;
StrName = "jacky";
nAge = 13;
WritePrivateProfileString("Student","Name",StrName,"c:\\setting.ini");

结果:(INI文件中显示如下:)

[Student]

Name=jacky

读取:

CString SName;
GetPrivateProfileString("Student","Name","DefaultName",SName.GetBuffer(MAX_LENGTH),MAX_LENGTH,"c:\\setting.ini");

结果:

SName = “jacky”;

这里需要注意点就是用完GetBuffer函数后一定要释放(用SName.ReleaseBuffer()函数),不然后面再用到SName的其他子函数就会失灵。

读整数比较简单,如下:

int Result = GetPrivateProfileInt("Student","nAge",0,"c:\\setting.ini")

返回值即为所读取的结果!

在GetPrivateProfileString最后一个参数是配置文件路径的参数,此路径只能是绝对路径,不能是相对路径,但现在我需要是我的exe文件能和我的配置文件在一起。因此我使用了GetCurrentDirectory函数

DWORD GetCurrentDirectory(
    DWORDnBufferLength,// size of directory buffer 缓冲区的长度
    LPTSTRlpBuffer// directory buffer 指定一个预定义字串,用于装载当前目录
    );

GetCurrentDirectory只是返回操作系统的当前目录

原代码如下:

CString server_ip;
 CString des="";
 ::GetCurrentDirectory(MAX_PATHLENGTH,des.GetBuffer(MAX_PATHLENGTH));
 des.ReleaseBuffer();
 des+="\\config.ini";
GetPrivateProfileString("PhoneDemo","Server_IP","",server_ip.GetBufferSetLength(15),15,des);
 server_ip.ReleaseBuffer();

注意:在这里使用CString变量时,在使用完GetBuffer后,紧接着一定要使用ReleaseBuffer()函数,才可以进行其他的诸如字符串+操作。

(二)注册表

(1)MFC的CWinApp类提供了访问注册表的函数

void SetRegistryKey( LPCTSTR lpszRegistryKey );
这个函数用来设置the App.m_pszRegistryKey的值,调用这个函数可以让应用程序的参数信息保存在注册表中,而不是INI文件中。

用WriteProfileString和WriteProfileInt来对注册表进行了写入操作
用GetProfileInt和GetProfileString对注册表进行了读取操作

注意:这几个函数只能用于对注册表的操作,这也是和WritePrivateProfileString、GetPrivateProfileString的区别,后者是对INI文件的读写

(2)具体操作如下:

// 以下代码放到InitInstance中

// 首先清除注册表键值变量所分配的内存空间
free((void*)m_pszRegistryKey); 
// 再清除Ini变量
free((void*)m_pszProfileName); 

// 改变Ini文件名.  
CString filepathtemp =""; 
char filepath[MAX_PATH]={'0'}; 
::GetCurrentDirectory(MAX_PATH,filepath); 
filepathtemp=CString(filepath); 
if(filepathtemp.Right(1)!="\\") 
{ 
    filepathtemp+="\\"; 
} 
CString profilepath = filepathtemp+"canshu.ini"; 
m_pszProfileName=_tcsdup("profilepath ");  
theApp.WriteProfileString( "学生","姓名","张三");  

进行完以上设置后我就可以直接使用GetProfileString 、WriteProfileString等函数进行操作了。

CWinApp成员函数
CWinApp::GetProfileString
CString GetProfileString( LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszDefault = NULL );
1、返回值
返回值是应用程序的.INI文件中的字符串,如果找不到该字符串,则为lpszDefault。框架支持的字符串最大长度为_MAX_PATH。如果lpszDefault为NULL,则返回值是一个空字符串。
2、参数: lpszSection 指向一个以null结尾的字符串,指定了包含入口的部分。
3、说明
调用这个函数以获得与应用程序的注册表或.INI文件中指定部分的入口相关的字符串。
这些入口按照如下方式保存:
·Windows NT 该值保存在注册表中
·Windows 3.X 该值保存在WIN.INI文件中
·Windows 95 该值保存在WIN.INI的缓冲版本中
4、示例

CString strSection = "My Section";

CString strStringItem = "My String Item";

CString strIntItem = "My Int Item";

CWinApp* pApp = AfxGetApp();

pApp->WriteProfileString(strSection, strStringItem, "test");

CString strValue;

strValue = pApp->GetProfileString(strSection, strStringItem);

ASSERT(strValue == "test");

pApp->WriteProfileInt(strSection, strIntItem, 1234);

int nValue;

nValue = pApp->GetProfileInt(strSection, strIntItem, 0);

ASSERT(nValue == 1234);

(3)注册表存放的位置:
开始-运行->输入regedit->HEY-CURRENT-USER->Software下,找即可。

http://blog.chinaunix.net/uid-24517893-id-2973290.html
http://wenku.baidu.com/link?url=9y3zMz8HNTrv7rn1W6RWs8kd_HNJYpgz-Ormxf-KXYTOwQxnTXqnGN2Sr3t9ydW7II3aMXS_HVOMhD_9zdAHiLrXB5g_fgfLMMiOcflnxiq

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值