用Windows API函数WritePrivateProfileString 和GetPrivateProfileString可对.INI文件进行读写操作。
其实,对.INI文件的读写完全可以利用Delphi的内置函数来实现。
1.INI文件的结构:
; 注释
[小节名]
关键字=值
例如(LoginInfo.ini文件中的内容):
;显示用户信息 【注释】 [UserInfo] 【小节名】 UserName=xiongmao 【关键字=值】 Password=123 【关键字=值】 Connected=0 【关键字=值】
INI文件允许有多个小节,每个小节又允许有多个关键字, “=”后面是该关键字的值。
2.取值的类型:
值的类型有三种:字符串、整型数值和布尔值。
其中字符串存贮在INI文件中时没有引号,布尔真值用1表示,布尔假值用0表示。
3.常用函数的介绍:
1>.打开INI文件
<1>.Filename:=ExtractFilePath(Paramstr(0))+’program.ini’;
<2>.myinifile:=Tinifile.Create(filename);
注意:FileName中可以包含路径名,缺省时为Windows所在目录(一般就是C:windows,对于Windows NT来说,则一般是c:winnt)。
用Create方法创建的实例,在使用完之后,调用Free方法释放内存。
2>.读取关键字的值
针对INI文件支持的字符串、整型数值、布尔值三种数据类型,TINIfiles类提供了三种不同的对象方法来读取INI文件中关键字的值。
<1>.vs:=myinifile.Readstring(’小节名’,’关键字’,缺省值); string类型
<2>.vi:=myinifile.Readinteger(’小节名’,’关键字’,缺省值);integer类型
<3>.vb:=myinifile.Readbool(’小节名’,’关键字’,缺省值); boolean类型
注意:当这个INI文件不存在时,上面的语句读取不发生异常,会自动赋后面的缺省值。 有值就读值,无值就为空。
3>.写入INI文件
myinifile.writestring(’小节名’,’关键字’,变量或字符串值); string类型
myinifile.writeinteger(’小节名’,’关键字’,变量或整型数值);integer类
myinifile.writebool(’小节名’,’关键字’,变量或True或False);boolean类型
注意:当这个INI文件不存在时,上面的语句还会自动创建该INI文件。
4>.删除关键字
myinifile.DeleteKey(’小节名’,’关键字’);
5>.对小节的操作
增加一个小节可用写入的方法来完成。
删除一个小节可用下面的对象方法:myinifile.EraseSection(’小节名’);
另外Tinifile类还提供了三种对象方法来对小节进行操作:
myinifile.readsection(’小节名’,TStrings变量); // (某小节名中的关键字)可将指定小节中的所有关键字名读取至一个字符串列表变量中;
myinifile.readsections(TStrings变量); // (全部小节名)可将INI文件中所有小节名读取至一个字符串列表变量中去。
myinifile.readsectionvalues(’小节名’,TStrings变量);
// (某小节名中的关键字和值、=)可将INI文件中指定小节的所有行(包括关键字、=、值)读取至一个字符串列表变量中去。
6>.释放
在适当的位置用下面的语句释放myinifile:
myinifile.distory;
或者:myinifile.Free;
4.使用实例
Uses IniFiles; //读取INI文件 procedure TForm1.btn1Click(Sender: TObject); var myinifile:TIniFile; begin myinifile:=TInifile.Create(ExtractFilePath(Application.ExeName)+ 'LoginInfo.ini '); edit1.Text:= myinifile.readstring( 'UserInfo', 'UserName', '缺省的用户名称 '); edit2.text:= inttostr(myinifile.readinteger( 'UserInfo', 'Password ',0)); checkbox1.Checked:= myinifile.readbool( 'UserInfo', 'Connected',False); myinifile.Destroy; end;
//写INI文件 procedure TForm1.btn2Click(Sender: TObject); var myinifile:TIniFile; begin myinifile:=TInifile.Create(ExtractFilePath(Application.ExeName)+ 'LoginInfo.ini '); myinifile.writestring('UserInfo', 'UserName ',edit1.Text); myinifile.writeinteger('UserInfo', 'UserInfo ',strtoint(edit2.text)); myinifile.writebool('UserInfo', 'Connected',checkbox1.Checked); myinifile.Destroy; end;