一.INI文件的结构
[小节名]ini文件
关键字1=值1
关键子2=值2
INI文件允许有多个小节,每个小节又允许有多个关键字,“=”后面是该关键字的值。
值的类型有三种:字符串、整型数值和布尔值。其中字符串存贮在INI文件中时没有引号,布尔真值用1表示,布尔假值用0表示。
二、定义
1、 在Interface的Uses节增加IniFiles;
2、 在Var变量定义部分增加一行: myinifile:Tinifile;
定义类的一个实例。然后,就可以对变量myinifile进行创建、打开、读取、写入等操作了
三、打开INI文件
myinifile:=Tinifile.create(program.ini);
上面这一行语句将会为变量myinifile与具体的文件program.ini建立联系,然后,就可以通过变量myinifile,来读写program.ini文件中的关键字的值了。
值得注意的是,如果括号中的文件名没有指明路径的话,那么这个Program.ini文件会存储在Windows目录中,把Program.ini文件存储在应用程序当前目录中的方法是:为其指定完整的路径及文件名。下面的两条语句可以完成这个功能:
Filename:=ExtractFilePath(Paramstr(0))+program.ini;
myinifile:=Tinifile.Create(filename);
四、读取INI文件
myinifile.Readstring(小节名,关键字,变量或字符串值); //读字符串
myinifile.ReadInteger(小节名,关键字,变量或整型数值); //读整数
myinifile.readbool(小节名,关键字,变量或True或False); //读布尔类型
五、写入INI文件
同样的,TInifile类也提供了三种不同的对象方法,向INI文件写入字符串、整型数及布尔类型的关键字。
myinifile.writestring(小节名,关键字,变量或字符串值);
myinifile.writeinteger(小节名,关键字,变量或整型数值);
myinifile.writebool(小节名,关键字,变量或True或False);
当这个INI文件不存在时,上面的语句还会自动创建该INI文件
六、删除关键字
除了可用写入方法增加一个关键字,Tinifile类还提供了一个删除关键字的对象方法:
myinifile.DeleteKey(小节名,关键字);
七、小节操作
增加一个小节可用写入的方法来完成,删除一个小节可用下面的对象方法:
myinifile.EraseSection(小节名);
另外Tinifile类还提供了三种对象方法来对小节进行操作:
myinifile.readsection(小节名,TStrings变量);可将指定小节中的所有关键字名读取至一个字符串列表变量中;
myinifile.readsections(TStrings变量);可将INI文件中所有小节名读取至一个字符串列表变量中去。
myinifile.readsectionvalues(小节名,TStrings变量);可将INI文件中指定小节的所有行(包括关键字、=、值)读取至一个字符串列表变量中去。
八、释放
在适当的位置用下面的语句释放myinifile:
myinifile.distory;
下面是具体例子。源代码如下。创建了一个myini.ini文件,有一个名为newini的小节,有3个关键字“用户名称”“已运行时间”“是否正式用户”。运行效果,可以在edit1里边填入“用户名称”;edit2显示时间,不可以改变数值;checkbox1通过打勾,保存时间和“用户名称”进入myini.ini文件里边,重新打开应用程序时,显示的时保存下来的时间和填入的“用户名称”,如果在myini.ini文件里边修改,效果和在程序运行过程中修改时一样的。
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses IniFiles; {uses 包含 TIniFile 的单元} var ini: TIniFile; path: string; {ini 文件路径} Section,Key: string; {分别表示 ini 文件的小节与关键字} { ini文件结构: ;注释 [小节名] 关键字=值 INI文件支持: string、integer、boolean、Date、Time、DateTime、Double 与二进制类型 string 值没有引号 boolean 的真假用 1、0 表示 } procedure TForm1.FormCreate(Sender: TObject); begin path := ChangeFileExt(ParamStr(0),'.ini'); ini := TIniFile.Create(path); {ini 对象建立需要文件路径参数, 如果缺少路径会默认Windows目录} end; //写入 ini 文件: procedure TForm1.Button1Click(Sender: TObject); begin Section := 'AAA'; Key := 'AString'; ini.WriteString(Section,Key,'AAA-String'); Key := 'AInteger'; ini.WriteInteger(Section,Key,111); Key := 'ABoolean'; ini.WriteBool(Section,Key,True); Key := 'ADate'; ini.WriteDate(Section,Key,Now); Key := 'ATime'; ini.WriteTime(Section,Key,Now); Key := 'ADateTime'; ini.WriteDateTime(Section,Key,Now); Key := 'ADouble'; ini.WriteFloat(Section,Key,Pi); Section := 'BBB'; Key := 'BString'; ini.WriteString(Section,Key,'BBB-String'); Key := 'BInteger'; ini.WriteInteger(Section,Key,222); Key := 'BBoolean'; ini.WriteBool(Section,Key,True); Key := 'BDate'; ini.WriteDate(Section,Key,Now); Key := 'BTime'; ini.WriteTime(Section,Key,Now); Key := 'BDateTime'; ini.WriteDateTime(Section,Key,Now); Key := 'BDouble'; ini.WriteFloat(Section,Key,Pi); Section := 'CCC'; Key := 'CString'; ini.WriteString(Section,Key,'CCC-String'); Key := 'CInteger'; ini.WriteInteger(Section,Key,333); Key := 'CBoolean'; ini.WriteBool(Section,Key,False); Key := 'CDate'; ini.WriteDate(Section,Key,Now); Key := 'CTime'; ini.WriteTime(Section,Key,Now); Key := 'CDateTime'; ini.WriteDateTime(Section,Key,Now); Key := 'CDouble'; ini.WriteFloat(Section,Key,Pi); {写入结果: [AAA] AString=AAA-String AInteger=111 ABoolean=1 ADate=2007-12-17 ATime=22:06:23 ADateTime=2007-12-17 22:06:23 ADouble=3.14159265358979 [BBB] BString=BBB-String BInteger=222 BBoolean=1 BDate=2007-12-17 BTime=22:06:23 BDateTime=2007-12-17 22:06:23 BDouble=3.14159265358979 [CCC] CString=CCC-String CInteger=333 CBoolean=0 CDate=2007-12-17 CTime=22:06:23 CDateTime=2007-12-17 22:06:23 CDouble=3.14159265358979 } end; //读取 ini 文件: procedure TForm1.Button2Click(Sender: TObject); var s: string; i: Integer; b: Boolean; f: Double; d: TDate; t: TTime; dt: TDateTime; begin s := ini.ReadString('BBB','BString',''); {最后一个参数是默认值} i := ini.ReadInteger('BBB','BInteger',0); b := ini.ReadBool('BBB','BBoolean',False); f := ini.ReadFloat('BBB','BDouble',0); d := ini.ReadDate('BBB','BDate',Now); t := ini.ReadTime('BBB','BTime',Now); dt := ini.ReadDateTime('BBB','BDateTime',Now); ShowMessage(s); {BBB-String} ShowMessage(IntToStr(i)); {222} ShowMessage(BoolToStr(b)); {-1(True)} ShowMessage(FloatToStr(f)); {3.14159265358979} ShowMessage(DateToStr(d)); {2007-12-17} ShowMessage(TimeToStr(t)); {22:06:23} ShowMessage(DateTimeToStr(dt)); {2007-12-17 22:06:23} end; //读入所有小节名到 TStrings: procedure TForm1.Button3Click(Sender: TObject); var List: TStrings; begin List := TStringList.Create; ini.ReadSections(List); ShowMessage(List.Text); { AAA BBB CCC } List.Free; end; //读入指定小节的所有关键字到 TStrings: procedure TForm1.Button4Click(Sender: TObject); var List: TStrings; begin List := TStringList.Create; ini.ReadSection('AAA',List); ShowMessage(List.Text); { AString AInteger ABoolean ADate ATime ADateTime ADouble } List.Free; end; //读入指定小节的所有关键字与值到 TStrings: procedure TForm1.Button5Click(Sender: TObject); var List: TStrings; begin List := TStringList.Create; ini.ReadSectionValues('BBB',List); ShowMessage(List.Text); { BString=BBB-String BInteger=222 BBoolean=1 BDate=2007-12-17 BTime=22:06:23 BDateTime=2007-12-17 22:06:23 BDouble=3.14159265358979 } List.Free; end; //删除与添加 procedure TForm1.Button6Click(Sender: TObject); begin ini.DeleteKey('BBB','BString'); {删除关键字} ini.EraseSection('CCC'); {删除小节} // ini.UpdateFile; {保存到文件} {添加小节与关键字或修改值, 直接写入即可} end; //其他功能 procedure TForm1.Button7Click(Sender: TObject); var b: Boolean; s: string; begin b := ini.SectionExists('DDD'); {判断某个小节是否存在} b := ini.ValueExists('AAA','AString'); {判断某个关键字的值是否存在} s := ini.FileName; {获取文件名} end; procedure TForm1.FormDestroy(Sender: TObject); begin ini.Free; end; end.