一、有必要了解INI文件的結構:
;註釋
[小節名]
關鍵字=值
……
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檔案支援的字串、整數數值、布林值三種資料類型,TINIfiles類別提供了三種不同的物件方法來讀取INI檔案中關鍵字的值。
假設已定義變數vs、vi、vb分別為string、integer、boolean類型。
vs:=myinifile.Readstring('小節名稱','關鍵字',預設值);
vi:=myinifile.Readinteger('小節名稱','關鍵字',預設值);
vb:=myinifile.Readbool('小節名稱','關鍵字',預設值);
其中缺省值為該INI檔案不存在該關鍵字時傳回的預設值。
五、寫入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;
九、一個實例
下面用一個簡單的例子(如圖),示範了建立、讀取、存貯INI檔案的方法。 myini.ini檔案包含有「程式參數」小節,和使用者名稱(字串)、是否正式使用者(布林值)和已運行時間(整數值)三個關鍵字。程式在窗體建立讀取這些數據,並在窗體釋放時寫myini.ini檔。
附帶程式清單
unitUnit1;
interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,IniFiles,StdCtrls,ExtCtrls;
type
TForm1=class(TForm)
Edit1:TEdit;
Edit2:TEdit;
CheckBox1:TCheckBox;
Timer1:TTimer;
procedureFormCreate(Sender:TObject);
procedureFormDestroy(Sender:TObject);
procedureTimer1Timer(Sender:TObject);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
Form1:TForm1;
myinifile:Tinifile;
implementation
{$R*.dfm}
procedureTForm1.FormCreate(Sender:TObject);
var
filename:string;
begin
filename:=ExtractFilePath(paramstr(0))+´myini.ini´;
myinifile:=TInifile.Create(filename);
edit1.Text:=myinifile.readstring(´程式參數´,´使用者名稱´,´缺省的使用者名稱´);
edit2.text:=inttostr(myinifile.readinteger(´程式參數´,´已運行時間´,0));
checkbox1.Checked:=myinifile.readbool(´程式參數´,´是否正式使用者´,False);
end;
procedureTForm1.FormDestroy(Sender:TObject);
begin
myinifile.writestring(´程式參數´,´使用者名稱´,edit1.Text);
myinifile.writeinteger(´程式參數´,´已運行時間´,strtoint(edit2.text));
myinifile.writebool(´程式參數´,´是否正式使用者´,checkbox1.Checked);
myinifile.Destroy;
end;
procedureTForm1.Timer1Timer(Sender:TObject);
begin
edit2.Text:=inttostr(strtoint(edit2.text)+1);
end;
end.
此實例在Delphi6.0+WinXP下除錯通過.