TIniFile und TMemIniFile verwenden

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Arbeiten mit INI-Dateien und der Registrierung

Das INI-Dateiformat wird noch häufig eingesetzt, besonders in Konfigurationsdateien (z.B. auch in DSK-Dateien). Das Format ist insbesondere für Anwendungen nützlich, da die Benutzung einer Systemregistrierung für Konfigurationsdaten nicht immer möglich ist. VCL/RTL macht mit den beiden Klassen TIniFile und TMemIniFile das Lesen und Schreiben von INI-Dateien sehr einfach.

TIniFile arbeitet direkt mit der INI-Datei auf der Festplatte, während TMemIniFile alle Änderungen im Speicher puffert und erst nach Aufruf der Methode UpdateFile in die Datei schreibt.

Hinweis: Wenn Sie mit TMemIniFile arbeiten, können Sie auch die AutoSave-Eigenschaft verwenden, um die Änderungen im Speicher automatisch in der INI-Datei zu speichern. Mit dieser Eigenschaft vermeiden Sie den Informationsverlust, der entstehen kann, wenn der Destruktor aufgerufen wird, bevor die UpdateFile-Methode aufgerufen wird.

Bei der Instantiierung eines TIniFile- oder TIniFile-Objekts übergeben Sie den Namen der INI-Datei als Parameter an den Konstruktor. Ist die Datei nicht vorhanden, wird sie automatisch erstellt. Anschließend können Sie Werte mit einer der Lesemethoden (ReadString, ReadString oder ReadString) abrufen. Das Lesen eines ganzen Abschnitts ist mit der Methode ReadString möglich. Geschrieben wird mit den Methoden ReadString oder ReadString.

Im folgenden Beispiel werden die Konfigurationsinformationen mit dem Ereignis OnCreate eines Formulars aus einer INI-Datei gelesen und in der Ereignisbehandlungsroutine für OnClose zurückgeschrieben.

Delphi:
 
 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
     Ini.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
     Ini.Free;
   end;
 end;
C++:
 __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;
  }

Den Read-Routinen werden jeweils drei Parameter übergeben. Der erste Parameter gibt den Abschnitt der INI-Datei an. Der zweite Abschnitt bezeichnet den zu lesenden Wert, und der dritte Parameter enthält einen Standardwert für den Fall, dass der Abschnitt oder Wert in der INI-Datei nicht vorhanden ist. In den Schreibmethoden werden nicht vorhandene Abschnitte und/oder Werte automatisch eingefügt. Das Beispiel erstellt beim ersten Start eine INI-Datei mit folgendem Inhalt:

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

Bei späteren Ausführungen dieser Anwendung werden die INI-Werte beim Erstellen des Formulars gelesen und im OnClose-Ereignis zurückgeschrieben.

Siehe auch