您的位置:首页 > 其它

在MFC中操作.ini文件

2013-11-14 16:44 288 查看
关于.ini

在我们写程序时,总有一些配置信息需要保存下来,以便在下一次启动程序完成初始化,这实际上是一种类持久化。将一些信息写入INI文件(initialization
file)中,可完成简单的持久化支持。

Windows提供了API接口用于操作INI文件,其支持的INI文件格式一般如下:

===============================

[Section1]

Key11=value11

Key12=value12

[Section2]

Key21=value21

Key22=value22

...

[SectionN]

KeyN1=valueN1

KeyN2=valueN2

===============================

一般一个INI文件可有N个节,每节可有n个键名及值对应,每个键名及其值以等式形式占一行。

一般键的名称可任取,不过建议用有意义的字符及词构成。值一般可为整数和字符串,其它类型要进行转换。

注意,字符串存贮在INI文件中时没有引号;key和value之间的等号前后不容空格;注释以分号“;”开头。

此外,Ini文件路径为绝对路径,不能是相对路径,可以使用GetCurrentDirectory来获取当前exe程序所在路径:

Cstring des;

GetCurrentDirectory(MAX_PATHLENGTH,des.GetBuffer(MAX_PATHLENGTH));

des.ReleaseBuffer();

.ini的读写操作
WritePrivateProfileString()
Windows对ini文件的操作有专门的函数,平时主要用到的三个函数是:
	::WritePrivateProfileString();     //写字符串到私有初始化文件;当ini不存在时会自动创建一个ini文件在指定路径。	::GetPrivateProfileString();        //从私有初始化文件获取字符串型值	::GetPrivateProfileInt();              //从私有初始化文件获取整型数值

1. BOOL
WritePrivateProfileString(                     //写字符串
LPCTSTR lpAppName,                        // INI文件中的一个字段名
LPCTSTR lpKeyName,                        // lpAppName下的一个键名,通俗讲就是变量名
LPCTSTR lpString,                              // 键值,也就是变量的值,不过必须为LPCTSTR型或CString型的
LPCTSTR lpFileName                         // 完整的INI文件名
);
实例:设现有一名学生,需把他的姓名和年龄写入 c:\student.ini 文件中
CString strName,strTemp; int
nAge; strName="张三"; nAge=12; ::WritePrivateProfileString("StudentInfo","Name",strName,"c:\\student.ini");
此时c:\stud\student.ini文件中的内容如下:

			[StudentInfo]			Name=张三 

要将学生的年龄保存下来,只需将整型的值变为字符型即可:
		strTemp.Format("%d",nAge);
::WritePrivateProfileString("StudentInfo","Age",strTemp,"c:\\student.ini");

2.  DWORD GetPrivateProfileString(             //读字符串
LPCTSTR lpAppName,      //同上
LPCTSTR lpKeyName,      //同上
LPCTSTR lpDefault,           //如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量. 
LPTSTR lpReturnedString, //接收INI文件中的值的CString对象,即目的缓存器 
DWORD nSize,                  //目的缓存器的大小
LPCTSTR lpFileName        //同上
);
实例:读入上例中的学生姓名


int MAX_PATH= 50;
CString strStudName;
GetPrivateProfileString("StudentInfo","Name","默认姓名",strStudName.GetBuffer(MAX_PATH),MAX_PATH,"c:\\student.ini");

注:GetBuffer()主要作用是将字符串的缓冲区长度锁定,releaseBuffer则是解除锁定,使得CString对象在以后的代码中继续可
以实现长度自适应增长的功能。如果在你的后面的程序中需要继续使用该字符串变量,且要动态改变其长度,则需要在
GetBufer后面调用ReleaseBuffer();如果你GetBuffer以后程序自函数就退出,局部变量都不存在了,调用不调用
ReleaseBuffer没什么意义了。

3. UINT GetPrivateProfileInt(                          
 //读整型值
LPCTSTR lpAppName,      //同上
LPCTSTR lpKeyName,      //同上
INT nDefault,                       //同上
LPCTSTR lpFileName        //同上
);
实例:读入上例中的学生年龄

		int nStudAge; 
nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c:\\student.ini");

读写系统配置文件

另外有不常用的三个函数,用于读写系统配置文件win.ini:

	::GetProfileInt();        //从win.ini 获取整数值  
::GetProfileString(); //从win.ini 获取字符串值
::WriteProfileString(); //写字符串到win.ini
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: