表示: Delphi C++
表示設定

TIniFile と TMemIniFile の使い方

提供:RAD Studio XE2
移動: 案内, 検索

RTL の利用:インデックス への移動

ini ファイルフォーマットは今も広く使用されており,多くの環境設定ファイル(DSK デスクトップ設定ファイルなど)も ini ファイルフォーマットです。クロスプラットフォームアプリケーションの場合,必ずしもシステムレジストリを使って環境設定情報を保存できるとは限りません。このため,ini ファイルフォーマットは特にクロスプラットフォームアプリケーションで使用すると便利です。VCL/RTL には,ini ファイルの読み書きを簡単にするための TIniFileTMemIniFile という 2 つのクラスがあります。

TIniFile がディスク上の ini ファイルを直接操作するのに対して,TMemIniFile は変更内容をバッファリングし,UpdateFile メソッドが呼び出されてからディスクに書き込みます。

TIniFile オブジェクトか TMemIniFile オブジェクトをインスタンス化するときに,パラメータとして ini ファイルの名前をコンストラクタに渡します。その名前のファイルが存在しなければ,自動的に作成されます。その後は,ReadStringReadDateReadIntegerReadBool などの読み出しメソッドを使って値を読み出せます。別の方法として ReadSection メソッドを使用すれば,ini ファイルのセクション全体を読み出すことができます。同様に,WriteBoolWriteIntegerWriteDateWriteString などのメソッドを使って書き出すこともできます。

次に示す例は,フォームの OnCreate イベントハンドラ内で ini ファイルの環境設定情報を読み込み,OnClose イベントハンドラ内で値を書き込んでいます。



 procedure TForm1.FormCreate(Sender: TObject);
 var
   Ini: TIniFile;
 begin
   Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
   try
     Top     := Ini.ReadInteger( 'Form', 'Top', 100 );
     Left    := Ini.ReadInteger( 'Form', 'Left', 100 );
     Caption := Ini.ReadString( 'Form', 'Caption', 'New Form' );
     if Ini.ReadBool( 'Form', 'InitMax', false ) then
       WindowState = wsMaximized
     else
       WindowState = wsNormal;
   finally
     TIniFile.Free;
   end;
 end;
 
 procedure TForm1.FormClose(Sender: TObject; var Action TCloseAction)
 var
   Ini: TIniFile;
 begin
   Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
   try
     Ini.WriteInteger( 'Form', 'Top', Top);
     Ini.WriteInteger( 'Form', 'Left', Left);
     Ini.WriteString( 'Form', 'Caption', Caption );
     Ini.WriteBool( 'Form', 'InitMax', WindowState = wsMaximized );
   finally
     TIniFile.Free;
   end;
 end;



 __fastcall TForm1::TForm1(TComponent *Owner) : TForm(Owner)
 {
   TIniFile *ini;
   ini = new TIniFile( ChangeFileExt( Application->ExeName, ".INI" ) );
   Top     =  ini->ReadInteger( "Form", "Top", 100 );
   Left    =  ini->ReadInteger( "Form", "Left", 100 );
   Caption =  ini->ReadString( "Form", "Caption",
                                  "Default Caption" );
   ini->ReadBool( "Form", "InitMax", false ) ?
     WindowState = wsMaximized :
     WindowState = wsNormal;
   delete ini;
 }
 
 void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
 {
   TIniFile *ini;
   ini = new TIniFile(ChangeFileExt( Application->ExeName, ".INI" ) );
   ini->WriteInteger( "Form", "Top", Top );
   ini->WriteInteger( "Form", "Left", Left );
   ini->WriteString ( "Form", "Caption", Caption );
   ini->WriteBool   ( "Form", "InitMax",
     WindowState == wsMaximized );
   delete ini;
 }



どの Read ルーチンも 3 つのパラメータをとります。1 番めのパラメータは,ini ファイルのセクションを識別します。2 番めのパラメータは,読み出す値を識別します。3 番めのパラメータは,指定したセクションまたは値が ini ファイルに存在しない場合のデフォルト値です。セクションや値が存在しない場合でも Read ルーチンが的確に処理するのと同様に,Write ルーチンもセクション/値が存在しなければ作成します。上に示したコード例の場合,アプリケーションを最初に実行したときに次のような ini ファイルが作成されます。

[Form]
Top=100
Left=100
Caption=Default Caption
InitMax=0

2 回め以降の起動では,フォーム作成時に ini ファイルの値が読み出され,OnClose イベント中に再び書き込まれます。

関連項目

以前のバージョン
他言語版