INI文件在系統配置及應用程序參數保存與設置方面,具有很重要的作用,所以可視化的編程一族,如VB、VC、VFP、Delphi等都提供了讀寫INI文件的方法,其中Delphi中操作INI文件,最為簡潔,這是因為Delphi提供了一個TInifile類,使我們可以非常靈活的處理INI文件
一.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文件
同樣的,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,inifiles, StdCtrls, ExtCtrls;
{調用inifiles 類}
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Timer1: TTimer;
CheckBox1: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
var
myinifile:TInifile;
{定義一個類的實例}
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
filename:string;
begin
{下面兩行的書寫形式,在應用程序的路徑下創建ini文件}
filename:=ExtractFilePath(paramstr(0))+'myini.ini';
myinifile:=TInifile.Create(filename);
edit1.Text:=myinifile.ReadString('newini','用戶名稱','胡長浩');
edit2.text:=inttostr(myinifile.readinteger
('newini','已運行時間',0));
checkbox1.Checked:=myinifile.readbool
('newini','是否正式用戶',False);
{newini是小節名字,中間字段是關鍵字的名字,第三個字段是缺省值。當myini.ini不存在時,上面的語句自動創建這個文件,上邊幾行裡的引號是單引號}
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
myinifile.writestring('newini','用戶名稱',edit1.Text);
myinifile.writeinteger('newini','已運行時間',
strtoint(edit2.text));
myinifile.writebool('newini','是否正式用戶',
checkbox1.Checked);
myinifile.Destroy;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
edit2.Text:=inttostr(strtoint(edit2.text)+1);
end;
end.