So bearbeiten Sie INI-Dateien in Delphi

INI-Dateien sind textbasierte Dateien zum Speichern der Konfigurationsdaten einer Anwendung.

Obwohl Windows empfiehlt, die Windows-Registrierung zum Speichern anwendungsspezifischer Konfigurationsdaten zu verwenden, werden Sie in vielen Fällen feststellen, dass INI-Dateien eine schnellere Möglichkeit für das Programm darstellen, auf seine Einstellungen zuzugreifen. Windows selbst verwendet sogar INI-Dateien. desktop.ini und boot.ini nur zwei Beispiele.

Eine einfache Verwendung von INI-Dateien als Mechanismus zum Speichern des Status wäre das Speichern der Größe und Position eines Formulars, wenn ein Formular an seiner vorherigen Position wieder angezeigt werden soll. Anstatt eine ganze Datenbank mit Informationen nach Größe oder Speicherort zu durchsuchen, wird stattdessen eine INI-Datei verwendet.

Das INI-Dateiformat

Die Initialisierungs- oder Konfigurationseinstellungsdatei (.INI) ist eine Textdatei mit einer Obergrenze von 64 KB, die in Abschnitte unterteilt ist, die jeweils null oder mehr Schlüssel enthalten. Jeder Schlüssel enthält null oder mehr Werte.

Hier ist ein Beispiel:

 [Abteilungsname]
Schlüsselname1 = Wert
;Kommentar
Schlüsselname2 = Wert

Abschnittsnamen sind in eckige Klammern eingeschlossen und müssen am Anfang einer Zeile beginnen. Abschnitts- und Schlüsselnamen unterscheiden nicht zwischen Groß- und Kleinschreibung (Groß- und Kleinschreibung spielt keine Rolle) und dürfen keine Leerzeichen enthalten. Das Schlüsselname gefolgt von einem Gleichheitszeichen ("="), optional umgeben von Abstandszeichen, die ignoriert werden.

Wenn derselbe Abschnitt in derselben Datei mehrmals vorkommt oder wenn derselbe Schlüssel in demselben Abschnitt mehrmals vorkommt, ist das letzte Vorkommen maßgebend.

Ein Schlüssel kann einen String, eine Ganzzahl oder einen Booleschen Wert enthalten Wert.

Delphi IDE verwendet in vielen Fällen das INI-Dateiformat. Zum Beispiel verwenden .DSK-Dateien (Desktop-Einstellungen) das INI-Format.

TIniFile-Klasse

Delphi bietet die TIniFile Klasse, in der deklariert inifiles.pas unit mit Methoden zum Speichern und Abrufen von Werten aus INI-Dateien.

Bevor Sie mit den TIniFile-Methoden arbeiten können, müssen Sie eine Instanz der Klasse erstellen:

 Verwendet inifiles;

var
  IniFile: TIniFile;
Start
  IniFile: = TIniFile.Create ('myapp.ini');

Der obige Code erstellt ein IniFile-Objekt und weist 'myapp.ini' der einzigen Eigenschaft der Klasse zu - der FileName-Eigenschaft -wird verwendet, um den Namen der zu verwendenden INI-Datei anzugeben.

Der oben beschriebene Code sucht nach myapp.ini Datei in der \ Windows Verzeichnis. Eine bessere Möglichkeit, Anwendungsdaten zu speichern, besteht im Ordner der Anwendung - geben Sie einfach den vollständigen Pfadnamen der Datei für die an Erstellen Methode:

 // Die INI in den Anwendungsordner legen,
// lass es den Anwendungsnamen haben
// und 'ini' für die Erweiterung:

iniFile: = TIniFile.Create (ChangeFileExt (Application.ExeName, '. ini'));

Lesen von INI

Die TIniFile-Klasse verfügt über mehrere "read" -Methoden. Der ReadString liest einen Zeichenfolgenwert aus dem Schlüssel ReadInteger. ReadFloat und ähnliches wird verwendet, um eine Zahl von einem Schlüssel zu lesen. Alle "read" -Methoden haben einen Standardwert, der verwendet werden kann, wenn der Eintrag nicht vorhanden ist.

Beispielsweise wird der ReadString wie folgt deklariert:

Funktion ReadString (const Section, Ident, Default: String): String; überschreiben;

Schreiben Sie an INI

Das TIniFile verfügt über eine entsprechende "Write" -Methode für jede "Read" -Methode. Dies sind WriteString, WriteBool, WriteInteger usw.

Wenn ein Programm beispielsweise den Namen der Person, die es zuletzt verwendet hat, und die Koordinaten des Hauptformulars speichern soll, wird möglicherweise ein Abschnitt mit dem Namen erstellt Benutzer, ein Schlüsselwort namens Zuletzt, Datum Um die Informationen zu verfolgen, wird ein Abschnitt aufgerufen Platzierung mit schlüsseln obenLinksBreite, und Höhe.

 project1.ini
 [Benutzer]
 Last = Zarko Gajic
 Datum = 29.01.2009
 [Platzierung]
 Top = 20
 Links = 35
 Breite = 500
 Höhe = 340

Beachten Sie, dass der Schlüssel benannt Zuletzt Enthält einen String-Wert, Datum Enthält einen TDateTime-Wert und alle Schlüssel im Platzierung Abschnitt enthält einen ganzzahligen Wert.

Das OnCreate-Ereignis des Hauptformulars ist der perfekte Ort, um den Code zu speichern, der für den Zugriff auf die Werte in der Initialisierungsdatei der Anwendung erforderlich ist:

 Verfahren TMainForm.FormCreate (Absender: TObject);
var
  appINI: TIniFile;
  LastUser: string;
  LastDate: TDateTime;
Start
  appINI: = TIniFile.Create (ChangeFileExt (Application.ExeName, '. ini'));
  Versuchen
    // Wenn kein letzter Benutzer eine leere Zeichenfolge zurückgibt
    LastUser: = appINI.ReadString ('User', 'Last', ");
    // Wenn kein letztes Datum vorhanden ist, kehre zum heutigen Datum zurück
    LastDate: = appINI.ReadDate ('Benutzer', 'Datum', Datum);
    // zeige die Nachricht
    ShowMessage ('Dieses Programm wurde bisher von' + LastUser + 'am' + DateToStr (LastDate) 'verwendet);
    Top: = appINI.ReadInteger ('Platzierung', 'Top', Top);
    Left: = appINI.ReadInteger ('Placement', 'Left', Left);
    Width: = appINI.ReadInteger ('Platzierung', 'Breite', Breite);
    Höhe: = appINI.ReadInteger ('Platzierung', 'Höhe', Höhe);
  schließlich
    appINI.Free;
  Ende;
Ende;

Das OnClose-Ereignis des Hauptformulars ist ideal für das Speichern Sie INI Teil des Projekts.

 Verfahren TMainForm.FormClose (Absender: TObject; var Aktion: TCloseAction);
var
  appINI: TIniFile;
Start
  appINI: = TIniFile.Create (ChangeFileExt (Application.ExeName, '. ini'));
Versuchen
    appINI.WriteString ('User', 'Last', 'Zarko Gajic');
    appINI.WriteDate ('Benutzer', 'Datum', Datum);
    mit appINI, MainForm tun
    Start
      WriteInteger ('Placement', 'Top', Top);
      WriteInteger ('Placement', 'Left', Left);
      WriteInteger ('Placement', 'Width', Width);
      WriteInteger ('Platzierung', 'Höhe', Höhe);
    Ende;
  schließlich
    AppIni.Free;
  Ende;
Ende;

INI-Abschnitte

Das EraseSection Löscht einen gesamten Abschnitt einer INI-Datei. ReadSection und ReadSections Füllen Sie ein TStringList-Objekt mit den Namen aller Abschnitte (und Schlüsselnamen) in der INI-Datei.

INI-Einschränkungen und Nachteile

Die TIniFile-Klasse verwendet die Windows-API, die für INI-Dateien ein Limit von 64 KB festlegt. Wenn Sie mehr als 64 KB Daten speichern müssen, sollten Sie das TMemIniFile verwenden.

Ein weiteres Problem kann auftreten, wenn Sie einen Abschnitt mit einem Wert von mehr als 8 K haben. Eine Möglichkeit, das Problem zu lösen, besteht darin, eine eigene Version der ReadSection-Methode zu schreiben.