TIniFile und TMemIniFile verwenden
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.
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;
__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.