.ini文件其实跟.txt文件是差不多的,只不过它有自己的一套读取方式,对.ini文件进行操作也有很多方法,而且现在网上还有很多人已经把它写成了一个类,可以方便的对.ini文件进行操作,我这里介绍的是在WIN32控制台项目的平台下进行对非win.ini文件进行操作。
经典格式:
INI文件的格式很简单,最基本的三个要素是:parameters,sections和comments。
什么是parameters?
INI所包含的最基本的“元素”就是parameter;每一个parameter都有一个name和一个value,name和value是由等号“=”隔开。name在等号的左边。
如:
name = value
什么是sections ?
所有的parameters都是以sections为单位结合在一起的。所有的section名称都是独占一行,并且sections名字都被方括号包围着([ and ])。在section声明后的所有parameters都是属于该section。对于一个section没有明显的结束标志符,一个section的开始就是上一个section的结束,或者是end of the file。Sections一般情况下不能被nested,当然特殊情况下也可以实现sections的嵌套。
section如下所示:
[section]
什么是comments ?
在INI文件中注释语句是以分号“;”开始的。所有的所有的注释语句不管多长都是独占一行直到结束的。在分号和行结束符之间的所有内容都是被忽略的。
注释实例如下:
;comments text
下面先介绍几个函数,它们的头文件是windows.h
一、对.ini文件写入数据:
函数原型:
BOOL WritePrivateProfileString( |
其中各参数的意义:
LPCTSTR lpAppName 是INI文件中的一个字段名.
LPCTSTR lpKeyName 是lpAppName下的一个键名,通俗讲就是变量名.
LPCTSTR lpString 是键值,也就是变量的值,不过必须为LPCTSTR型或CString型的.
LPCTSTR lpFileName 是完整的INI文件名.
2.具体使用方法:设现有一名学生,需把他的姓名和年龄写入 c:\stud\student.ini 文件中.
CString strName,strTemp; |
此时 c:\stud\student.ini文件中的内容如下:
要将整型的数据保存,将整型的转换为串型的,然后向上面那样操作就行了
二.将信息从INI文件中读入程序中的变量.
1.所用的WINAPI函数原型为:
DWORD GetPrivateProfileString( |
其中各参数的意义:
前二个参数与 WritePrivateProfileString中的意义一样.
lpDefault : 如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量.
lpReturnedString : 接收INI文件中的值的CString对象,即目的缓存器.
nSize : 目的缓存器的大小.
lpFileName : 是完整的INI文件名.
2.具体使用方法:现要将上一步中写入的学生的信息读入程序中.
CString strStudName; |
执行后 strStudName 的值为:"张三",若前两个参数有误,其值为:"默认姓名".
3.读入整型值要用另一个WINAPI函数:
UINT GetPrivateProfileInt( |
这里的参数意义与上相同.使用方法如下:
nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c:\\stud\\student.ini"); |
下面是我自己学习的时候用来测试的WS代码,编译环境VS2003,系统XP
2 #include "windows.h"
3 #include "atlstr.h"
4
5 int _tmain(int argc, _TCHAR* argv[])
6 {
7 LPCTSTR strTemp = "ZhangSan";
8 CString str;
9 str = "nihao";
10 int nAge = 12;
11 str.Format("%d",nAge);
12 CString strStudName;
13 int nStudAge;
14 ::WritePrivateProfileString("StudentInfo","Name",strTemp,
15 "C:\\Documents and Settings\\Administrator\\桌面\\noname\\student.ini");
16 ::WritePrivateProfileString("StudentInfo","Age",str,
17 "C:\\Documents and Settings\\Administrator\\桌面\\noname\\student.ini");
18 ::GetPrivateProfileString("StudentInfo","Name","noname",strStudName.GetBuffer(MAX_PATH),MAX_PATH,
19 "C:\\Documents and Settings\\Administrator\\桌面\\noname\\student.ini");
20 nStudAge = ::GetPrivateProfileInt("StudentInfo","Age",10,
21 "C:\\Documents and Settings\\Administrator\\桌面\\noname\\student.ini");
22 printf("%s\n",strStudName);
23 printf("%d\n",nStudAge);
24 getchar();
25 return 0;
26 }
在当我郁闷,如果parameters相同的时候,要怎么样读取数据,我看了一下.ini文件里面的内容,发现在同一个section下还没有出现过有相同parameters的情况出现
最后附上函数总表
表6-11 文本操作CRT函数 | |
函数 |
含义 |
GetProfileInt |
从win.ini文件指定Section中读取一个int属性值 |
GetProfileSection |
从win.ini文件指定Section中获取所有的属性 |
GetProfileString |
从win.ini文件指定Section中读取一个文本属性值 |
WriteProfileSection |
向win.ini文件写入一个Section |
WriteProfileString |
向win.ini文件指定Section中写入一个文本属性值 |
GetPrivateProfileInt |
从指定的INI文件的Section中读取一个int属性值 |
GetPrivateProfileSection |
从指定的INI文件中读取指定的Section |
GetPrivateProfileSectionNames |
从指定的INI文件中获取所有的Section名 |
GetPrivateProfileString |
从指定的INI文件的Section中读取一个文本属性值 |
GetPrivateProfileStruct |
从指定的INI文件的Section中读取一个结构属性值 |
WritePrivateProfileSection |
向指定的INI文件写入一个Section |
WritePrivateProfileString |
向指定的INI文件的Section中写入一个文本属性值 |
WritePrivateProfileStruct |
向指定的INI文件的Section中写入一个结构属性值 |