So bearbeiten Sie INI-Dateien in Delphi

INI-Dateien sind textbasierte Dateien, in denen die Konfigurationsdaten einer Anwendung gespeichert werden.

Obwohl Windows empfiehlt die Verwendung der Windows-Registrierung zum Speichern anwendungsspezifischer Konfigurationsdaten. In vielen Fällen bieten INI-Dateien eine schnellere Möglichkeit für das Programm, 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 besteht darin, die Größe und den Speicherort eines Formulars zu speichern, wenn ein Formular an seiner vorherigen Position wieder angezeigt werden soll. Anstatt ein Ganzes zu durchsuchen Datenbank mit Informationen Um die Größe oder den Speicherort zu ermitteln, wird stattdessen eine INI-Datei verwendet.

Das INI-Dateiformat

Die Initialisierungs- oder Konfigurationseinstellungsdatei (.INI) ist eine Textdatei mit einem Limit 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.

instagram viewer

Hier ist ein Beispiel:

 [Abteilungsname]
Keyname1 = Wert
;Kommentar
Keyname2 = Wert

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

Wenn derselbe Abschnitt mehr als einmal in derselben Datei vorkommt oder wenn derselbe Schlüssel mehr als einmal im selben Abschnitt vorkommt, ist das letzte Vorkommen maßgebend.

Ein Schlüssel kann enthalten Zeichenfolge, Ganzzahl oder Boolescher WertWert.​

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

TIniFile-Klasse

Delphi bietet die TIniFile Klasse, deklariert in der inifiles.pas Einheit 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 INI-Datei anzugeben, die Sie verwenden möchten.

Der oben geschriebene Code sucht nach dem myapp.ini Datei in der \ Windows Verzeichnis. Eine bessere Möglichkeit zum Speichern von Anwendungsdaten finden Sie im Ordner der Anwendung. Geben Sie einfach den vollständigen Pfadnamen der Datei für das an Erstellen Methode:

// Platziere die INI im Anwendungsordner,
// lass es den Anwendungsnamen haben
// und 'ini' zur Erweiterung:

iniFile: = TIniFile. Create (ChangeFileExt (Anwendung). ExeName, '. Ini'));

Lesen von INI

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

Beispielsweise wird der ReadString wie folgt deklariert:

Funktion ReadString (const Abschnitt, Ident, Standard: String): String; überschreiben;

Schreiben Sie an INI

Die TIniFile verfügt über eine entsprechende "Schreib" -Methode für jede "Lese" -Methode. Sie sind WriteString, WriteBool, WriteInteger usw.

Wenn wir beispielsweise möchten, dass sich ein Programm den Namen der letzten Person merkt, die es verwendet hat, wann es war und wie die Hauptformularkoordinaten lauteten, können wir einen Abschnitt namens aufrufen Benutzer, ein Schlüsselwort namens Zuletzt, Datum um die Informationen zu verfolgen, und ein Abschnitt namens Platzierung mit Schlüsseln oben, Links, Breite, und Höhe.

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

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

Das OnCreate-Ereignis des Hauptformulars ist der perfekte Ort zum Speichern des Codes, 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 (Anwendung). ExeName, '. Ini'));
Versuchen
// wenn kein letzter Benutzer eine leere Zeichenfolge zurückgibt
LastUser: = appINI.ReadString ('User', 'Last', '');
// Wenn kein letztes Datum vorhanden ist, wird das heutige Datum zurückgegeben
LastDate: = appINI.ReadDate ('Benutzer', 'Datum', Datum);
// zeige die Nachricht
ShowMessage ('Dieses Programm wurde zuvor von' + LastUser + 'on' + DateToStr (LastDate) verwendet);
Oben: = appINI.ReadInteger ('Platzierung', 'Oben', Oben);
Links: = appINI.ReadInteger ('Platzierung', 'Links', Links);
Breite: = 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 die Speichern Sie INI Teil des Projekts.

Verfahren TMainForm. FormClose (Absender: TObject; var Aktion: TCloseAction);
var
appINI: TIniFile;
Start
appINI: = TIniFile. Create (ChangeFileExt (Anwendung). ExeName, '. Ini'));
Versuchen
appINI.WriteString ('Benutzer', 'Letzter', 'Zarko Gajic');
appINI.WriteDate ('Benutzer', 'Datum', Datum);
mit AppINI, MainForm tun
Start
WriteInteger ('Platzierung', 'Oben', Oben);
WriteInteger ('Platzierung', 'Links', Links);
WriteInteger ('Platzierung', 'Breite', Breite);
WriteInteger ('Platzierung', 'Höhe', Höhe);
Ende;
schließlich
appIni. Kostenlos;
Ende;
Ende;

INI-Abschnitte

Das EraseSection löscht einen ganzen 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 & Nachteile

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

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