本篇文章1790字,读完约4分钟

ini文件是扩展名为“ini”的文件。 在windows系统中,ini文件很多,最重要的是“system.ini”、“system32.ini”和“win.ini”。 此文件首先存储您所做的选择以及系统的各种参数。 客户可以通过修改ini文件来更改APP和系统的许多配置。 但是,自从windows 95结束,并在windows系统中引入了注册表概念之后,ini文件在windows系统中的地位开始下降。 这是因为注册表的独特优势,APP和系统将多个参数和初始化新闻放在注册表中。 但在某些情况下,ini文件具有不可替代的地位。

“INI文件详解之Windows下读写".ini"文件的系统API”


ini文件结构

ini文件是以优势方式排列的拷贝文件。 每个ini文件的结构非常相似,由几个段落section组成。 在每个带括号的标题下,有几个以一个单词开头的关键字keyword和等号,等号的右侧有与关键字相对应的值value。 的一般形式如下

第1节
关键字1 =值1
关键字2 =值2
……

第2节关键字3 =值3
关键字4 =值4

ini文件,即初始化文件。 这种类型的文件一般存储程序初始化新闻。 ini文件由几个部分( section )组成,每个部分由几个键( key )组成,并且可以为每个键指定对应的值。 读写ini文件实际上是读写某个section中对应的key的值,这只要利用几个函数就可以。

“INI文件详解之Windows下读写".ini"文件的系统API”

一、向ini文件写入新闻的函数

1 .将新闻写入系统的win.ini文件

使用布尔writeprofilestring (

lpctstr lpappname,//子句的名称是以0结尾的字符串

lpctstr lpkeyname,//键的名称是以0结尾的字符串。 如果为null,则删除整个部分

lpctstr lpstring //键的值是以0结尾的字符串。 如果为null,则删除对应的密钥

2 .将新闻写入自己定义的. ini文件

使用布尔writeprivateprofilestring (

lpctstr lpappname,//同上

LC TSTR LP键名,//同上

lpctstr LP字符串,//同上

lpctstr lpfilename //要写入的文件的文件名。 如果该ini文件与程序位于同一目录中,则也可以采用相对

//传球,否则有必要打出绝招。

例如:

: writeprofilestring ( (测试,标识,xym );

在win.ini中创建test部分,在该部分中创建密钥id。 值为xym

:写入专用配置文件(测试、id、xym、d:\VC\ex1\ex1.ini );

在//ex1目录下的ex1.ini中创建test部分,并在该部分中创建密钥id。 值为xym

如果ex1.ini文件与用于读写该文件的程序位于同一目录中,则也可以按如下方式编写上述语句:

: writeprivateprofilestring (测试,id,xym,.\ex1.ini );

需要注意的是,c系列语言中的转义字符'; ()\'; 反斜线'; () ) 39; 。 另外,采用相对路径时,\前面的.符号不能丢弃。

二、从ini文件读取数据的函数

1、从系统的win.ini文件中读取新闻

(1)读取字符串

dword getprofilestring (

lpctstr lpappname,//节名

读取lpctstr LP密钥名称,//密钥名称及其值

如果不存在lpctstr lpdefault,//指定的密钥,则该值为读取默认值

通过指向lptstr lpreturnedstring,//缓冲区的指针,接收读取的字符串

指定dwordnsize//lpreturnedstring所指向的缓冲区的大小

例如:

字串星;

: getprofilestring (测试,标识,错误,str.getbuffer(20 ),20 );

)2)读取整数

uint getprofileint (

lpctstr lpappname,//同上

LC TSTR LP键名,//同上

int ndefault //如果指定的密钥名不存在,则该值为读取的默认值

如果使用以下句子写年龄新闻:

: writeprofilestring (测试,age,25 );

在win.ini中创建test部分,在该部分中创建密钥age。 值为25

可以在以下语句中读取age密钥的值。

int age;

age =:getprofileint (测试,age,0 );

2、从自己的ini文件中读取新闻

(1)读取字符串

使用dword getprivateprofilestring (

lpctstr lpappname,//同上1(1) )。

LPC TSTR LP键名,//同上1(1) )。

lpctstr LP默认值,//同上1(1) )。

lptstr lpreturnedstring,//同1(1) )。

dword nsize,//同1(1) )。

读取lpctstr lpfilename //新闻的文件名。 如果此ini文件与程序位于同一目录中,则还可以采用阶段

//对于传球,否则有必要打出绝对的传球。

例如:

字串星;

: getprivateprofilestring (测试、标识、错误、str.getbuffer ) 20,.

或者:

: getprivateprofilestring (测试,标识,错误,str.getbuffer ( 20,20,d:\ VC ( ex1.ini ) );

)2)读取整数

uint getprivateprofileint (

lpctstr lpappname,//同上

LC TSTR LP键名,//同上

int ndefault,//如果指定的密钥名不存在,则该值为读取的默认值

lpctstr lpfilename //同上

如果使用以下句子写年龄新闻:

: writeprivateprofilestring (测试,age,25,.\ex1.ini );

在ex1.ini中创建测试部分,在该部分中创建密钥age。 值为25

可以在以下语句中读取age密钥的值。

int age;

age =:getprivateprofileint (测试,age,0,.\ex1.ini );

三、删除键值或部分

回顾writeprofilestring函数的证明

使用布尔writeprofilestring (

lpctstr lpappname,//子句的名称是以0结尾的字符串

lpctstr lpkeyname,//键的名称是以0结尾的字符串。 如果为null,则删除整个部分

lpctstr lpstring //键的值是以0结尾的字符串。 如果为null,则删除对应的密钥

由此可见,要删除节,只需将writeprofilestring的第二个参数设置为null即可。 要删除密钥,只需将函数的第三个参数设置为null。 这是从系统的win.ini中删除一个部分或密钥。 同样,从自己定义的ini文件中删除节或键时也可以执行同样的操作。

“INI文件详解之Windows下读写".ini"文件的系统API”

例如:

:写入配置文件(测试、空、空); 删除win.ini的测试部分

: writeprofilestring (测试,标识,空值); 从win.ini中删除标识密钥

: writeprivateprofilestring (测试、空、空、.\ex1.ini ); 删除ex1.ini的测试部分

: writeprivateprofilestring (测试、标识、空值、.\ex1.ini ); ex1.删除ini的id键

四、如何评价一个ini文件有几个部分

评估一个ini文件中有多少个子句的最简单方法是找出所有子句名称,然后计数子句名称的个数。 为了找到所有的子句名称,只要采用getprivateprofilesectionnames函数即可。 其原型如下。

dwordgetprivateprofilesectionnames (

lptstr lpszreturnbuffer,//是指包含所有返回的节名称的缓冲器

dword nsize,//参数lpszreturnbuffer的大小

lpctstr lpfilename //文件名。 如果该ini文件与程序位于同一目录中,则为、

//可以采用相对传球,否则绝对需要传球

以下函数用于合计一个ini文件中总共有多少个部分。 当然,如果需要每个部分的每个键及其值,可以通过查找该部分的名称轻松地获得。

/*统计有几节

节名分离方法: chsectionnames数组的第一个字符为'; ([109]和# 39; 文字的情况下

有0个小节。 否则,从chsectionnames数组的第一个字符开始依次向后查找。

'; ([111]和# 39; 文字,该文字的后续文字为'; ([111]和# 39; 文字表示前面

的文字构成一个从句名。 '; ([112]和# 39; 文字时,统计结束。 /

intctestdlg::呼叫计数(语音) ) )。

{

电信公司[ 2048 ] = {0}; //由所有节名称组成的字符数组

字符截面名称; //保留找到的某个区段名称字符串的起始地址

英特尔; //i指数组chsectionnames的某个位置,从0开始,按顺序向后移动

int j=0; //j保留下一个节名字符串开头地址相对于当前I的位置偏移量

int计数= 0; //统计子句的个数

/ /字符串名称;

/ /字符标识[ 20 ];

: getprivateprofilesectionnames (检查名称,2048,.\ex1.ini );

for(I=0; i2048; I +,j++

{

if (细胞名称[0] = = & # 39; ([125]和# 39; )

布莱克; //如果第一个字符为0,则证明ini中没有子句

if (细胞名称) = = & # 39; ([127]和# 39; )

{

截面名称= & amp; 细胞名称; 如果找到//0,则从该字符前面减去j个偏移。

//是区段名称的第一个地址

j=-1; 找到//区段名称后,恢复j的值,计算下一个区段名称地址的偏移量

之所以使用//-1,是因为子句名字符串的最后一个字符0是终止符号,不能是子句名

//的一部分

//:获取专用轮廓(截面名称、id、错误、id、20、...\ex1.ini );

名称格式( % s,标识); */

在获取//节名时,如果知道该节有那些密钥,就可以获取该节中的密钥值。


afxmessagebox (截面名称; //显示找到的东西

if (方块[ I +1] = =0() ( ) ) ) ) ) ) ) ) ) ) ) ) ) )。

{

布莱克; / /如果两个相邻字符都为0,则找到所有子句名称,然后循环结束

}

()/br/) )。


标题:“INI文件详解之Windows下读写".ini"文件的系统API”

地址:http://www.laszt.com/lhxinwen/4187.html