Computerwissenschaften

So bearbeiten Sie INI-Dateien in Delphi

So bearbeiten Sie INI-Dateien in Delphi

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

Obwohl Windows die Verwendung der Windows-Registrierung zum Speichern anwendungsspezifischer Konfigurationsdaten empfiehlt, werden Sie in vielen Fällen feststellen, dass INI-Dateien dem Programm eine schnellere Möglichkeit bieten, auf seine Einstellungen zuzugreifen. Windows selbst verwendet sogar INI-Dateien. desktop.ini  und boot.ini  sind 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 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 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.

Hier ist ein Beispiel:


[SectionName] 
keyname1=value 
; comment 
keyname2=value

Abschnittsnamen sind in eckigen Klammern eingeschlossen und müssen am Zeilenanfang beginnen. Abschnitts- und Schlüsselnamen unterscheiden nicht zwischen Groß- und Kleinschreibung (die Groß- und Kleinschreibung spielt keine Rolle) und dürfen keine Abstandszeichen enthalten. Auf den Schlüsselnamen 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 einen String-. Integer- oder Booleschen Wert enthalten .

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

 

TIniFile-Klasse

Delphi bietet die TIniFile Klasse, in der erklärte 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; 
 begin
IniFile:=TIniFile.Create ('myapp.ini');

Der obige Code erstellt ein IniFile-Objekt und weist der einzigen Eigenschaft der Klasse – der FileName-Eigenschaft – ‚myapp.ini‘ zu, mit der der Name der zu verwendenden INI-Datei angegeben wird.

Der oben beschriebene Code sucht nach der Datei myapp.ini im Verzeichnis \ Windows . 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 die Create- Methode an:


 // Platziere die INI im Anwendungsordner, 
// lass sie den Anwendungsnamen 
// und 'ini' für die Erweiterung haben:
 
 iniFile:=TIniFile.Create (ChangeFileExt (Application.ExeName, '. ini'));

 

Lesen von INI

Die TIniFile-Klasse verfügt über mehrere „Lesemethoden“. Der ReadString liest einen Zeichenfolgenwert aus 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 Section, Ident, Default: 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 ein Programm beispielsweise den Namen der letzten Person speichern soll, die es verwendet hat, wann es war und wie die Hauptformularkoordinaten lauteten, können wir einen Abschnitt namens Benutzer einrichten , ein Schlüsselwort namens Last , Date  , um die Informationen zu verfolgen und einen Abschnitt namens Platzierung  mit den Tasten ObenLinksBreite und Höhe .


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

Beachten Sie, dass der Schlüssel mit dem Namen Last einen Zeichenfolgenwert enthält, Date einen TDateTime-Wert enthält und alle Schlüssel im Abschnitt Placement einen ganzzahligen Wert enthalten.

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:


 procedure TMainForm.FormCreate (Sender: TObject); 
 var
appINI: TIniFile; 
   LastUser: string; 
   LastDate: TDateTime; 
 begin
appINI:=TIniFile.Create (ChangeFileExt (Application.ExeName, '. ini')); 
   versuche 
 // wenn kein letzter Benutzer eine leere Zeichenfolge
  zurückgibt LastUser:=appINI.ReadString ('User', 'Last', ''); 
 // wenn kein letztes Datum das heutige Datum
  zurückgibt LastDate:=appINI.ReadDate ('User', 'Date', Date); 
 
 // 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); 
   endlich
  appINI.Free; 
   Ende ; 
 Ende ;

Das OnClose-Ereignis des Hauptformulars ist ideal für den Save INI- Teil des Projekts.


 Prozedur TMainForm.FormClose (Absender: TObject; var Aktion: TCloseAction); 
 var
appINI: TIniFile; 
 begin
appINI:=TIniFile.Create (ChangeFileExt (Application.ExeName, '. ini')); 
 versuchen Sie es mit
  appINI.WriteString ('User', 'Last', 'Zarko Gajic'); 
 appINI.WriteDate ('Benutzer', 'Datum', Datum); 
 
 mit appINI, Main Sie 
 beginnen
Writeinteger ( 'Platzierung', 'Top', Top); 
   WriteInteger ('Platzierung', 'Links', Links); 
   WriteInteger ('Platzierung', 'Breite', Breite); 
   WriteInteger ('Platzierung', 'Höhe', Höhe); 
 Ende ; 
   endlich
  appIni.Free; 
   Ende ; 
 Ende ;

 

INI-Abschnitte

Der EraseSection löscht einen gesamten Abschnitt einer INI-Datei. ReadSection und ReadSections füllen 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,  die INI-Dateien ein Limit von 64 KB auferlegt. 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.

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.