Hoe INI-bestanden van Delphi te manipuleren

The best protection against click fraud.

INI-bestanden zijn op tekst gebaseerde bestanden die worden gebruikt voor het opslaan van de configuratiegegevens van een applicatie.

Ondanks dat ramen raadt aan het Windows-register te gebruiken om toepassingsspecifieke configuratiegegevens op te slaan, in veel gevallen zult u zien dat INI-bestanden het programma een snellere manier bieden om toegang te krijgen tot de instellingen. Windows zelf gebruikt zelfs INI-bestanden; desktop.ini en boot.ini zijn slechts twee voorbeelden.

Een eenvoudig gebruik van INI-bestanden als een mechanisme voor statusbesparing zou zijn om de grootte en locatie van een formulier op te slaan als u wilt dat een formulier opnieuw op de vorige positie verschijnt. In plaats van een geheel te doorzoeken database van informatie om de grootte of locatie te vinden, wordt in plaats daarvan een INI-bestand gebruikt.

Het INI-bestandsformaat

Het initialisatie- of configuratie-instellingenbestand (.INI) is een tekstbestand met een limiet van 64 KB verdeeld in secties, die elk nul of meer sleutels bevatten. Elke sleutel bevat nul of meer waarden.

instagram viewer

Hier is een voorbeeld:

 [Sectie naam]
sleutelnaam1 = waarde
;commentaar
keyname2 = waarde

Sectienamen staan ​​tussen vierkante haken en moeten aan het begin van een regel beginnen. Sectie- en sleutelnamen zijn niet hoofdlettergevoelig (de zaak maakt niet uit) en mogen geen spatietekens bevatten. De sleutel naam wordt gevolgd door een gelijkteken ("="), optioneel omgeven door spatietekens, die worden genegeerd.

Als dezelfde sectie meer dan eens in hetzelfde bestand voorkomt, of als dezelfde sleutel meer dan eens in dezelfde sectie voorkomt, dan prevaleert de laatste keer.

Een sleutel kan bevatten draad, geheel getal of booleanwaarde.​

Delphi IDE gebruikt in veel gevallen het INI-bestandsformaat. Bijvoorbeeld, .DSK-bestanden (bureaubladinstellingen) gebruiken het INI-formaat.

TIniFile-klasse

Delphi levert de TINIFile klasse, verklaard in de inifiles.pas eenheid, met methoden voor het opslaan en ophalen van waarden uit INI-bestanden.

Voordat u met de TIniFile-methoden werkt, moet u een instantie van de klasse maken:

toepassingen inifiles;
...
var
IniFile: TIniFile;
beginnen
IniFile: = TIniFile. Maken ('myapp.ini');

De bovenstaande code maakt een IniFile-object en wijst 'myapp.ini' toe aan de enige eigenschap van de klasse - de Bestandsnaam eigenschap —Gebruikt om de naam op te geven van het INI-bestand dat u wilt gebruiken.

De code zoals hierboven geschreven zoekt naar de myapp.ini bestand in de \Ramen directory. Een betere manier om toepassingsgegevens op te slaan, is in de toepassingsmap - geef gewoon de volledige padnaam op van het bestand voor de Creëer methode:

// plaats de INI in de toepassingsmap,
// laat het de toepassingsnaam hebben
// en 'ini' voor extensie:

iniFile: = TINiFile. Maak (ChangeFileExt (toepassing. ExeName, '. Ini'));

Lezen van INI

De klasse TIniFile heeft verschillende "lees" -methoden. De ReadString leest een tekenreekswaarde van een sleutel, ReadInteger. ReadFloat en dergelijke worden gebruikt om een ​​nummer van een sleutel te lezen. Alle "read" -methoden hebben een standaardwaarde die kan worden gebruikt als de vermelding niet bestaat.

De ReadString wordt bijvoorbeeld gedeclareerd als:

functie ReadString (const Sectie, Ident, Standaard: String): String; overschrijven;

Schrijf naar INI

De TIniFile heeft een corresponderende "schrijf" -methode voor elke "lees" -methode. Dit zijn WriteString, WriteBool, WriteInteger, etc.

Als we bijvoorbeeld willen dat een programma de naam onthoudt van de laatste persoon die het heeft gebruikt, wanneer het was en wat de belangrijkste formuliercoördinaten waren, zouden we een sectie kunnen maken met de naam Gebruikers, een trefwoord genaamd Laatste, Datum om de informatie bij te houden, en een sectie genaamd Plaatsing met sleutels Top, Links, Breedte, en Hoogte.

project1.ini
[Gebruiker]
Laatste = Zarko Gajic
Datum = 01/29/2009
[Plaatsing]
Boven = 20
Links = 35
Breedte = 500
Hoogte = 340

Merk op dat de sleutel wordt genoemd Laatste heeft een tekenreekswaarde, Datum heeft een TDateTime-waarde en alle toetsen in de Plaatsing sectie bevat een geheel getal.

De OnCreate-gebeurtenis van het hoofdformulier is de perfecte plaats om de code op te slaan die nodig is om toegang te krijgen tot de waarden in het initialisatiebestand van de toepassing:

procedure TMainForm. FormCreate (Afzender: TObject);
var
appINI: TIniFile;
LastUser: string;
LastDate: TDateTime;
beginnen
appINI: = TIniFile. Maak (ChangeFileExt (toepassing. ExeName, '. Ini'));
proberen
// als er geen laatste gebruiker een lege tekenreeks retourneert
LastUser: = appINI.ReadString ('Gebruiker', 'Laatste', '');
// als er geen laatste datum is, retourneer de datum van vandaag
LastDate: = appINI.ReadDate ('Gebruiker', 'Datum', Datum);
// toon het bericht
ShowMessage ('Dit programma werd eerder gebruikt door' + LastUser + 'op' + DateToStr (LastDate));
Top: = appINI.ReadInteger ('Plaatsing', 'Top', Top);
Links: = appINI.ReadInteger ('Plaatsing', 'Links', Links);
Breedte: = appINI.ReadInteger ('Plaatsing', 'Breedte', Breedte);
Hoogte: = appINI.ReadInteger ('Plaatsing', 'Hoogte', Hoogte);
Tenslotte
appINI.Free;
einde;
einde;

Het OnClose-evenement van het hoofdformulier is ideaal voor de Bespaar INI onderdeel van het project.

procedure TMainForm. FormClose (Afzender: TObject; var Actie: TCloseAction);
var
appINI: TIniFile;
beginnen
appINI: = TIniFile. Maak (ChangeFileExt (toepassing. ExeName, '. Ini'));
proberen
appINI.WriteString ('Gebruiker', 'Laatste', 'Zarko Gajic');
appINI.WriteDate ('Gebruiker', 'Datum', Datum);
met appINI, MainForm Doen
beginnen
WriteInteger ('Plaatsing', 'Boven', Boven);
WriteInteger ('Plaatsing', 'Links', Links);
WriteInteger ('Plaatsing', 'Breedte', Breedte);
WriteInteger ('Plaatsing', 'Hoogte', Hoogte);
einde;
Tenslotte
appIni. Vrij;
einde;
einde;

INI secties

De Wis sectie wist een hele sectie van een INI-bestand. ReadSectie en Lees secties vul een TStringList-object met de namen van alle secties (en sleutelnamen) in het INI-bestand.

INI-beperkingen en nadelen

De klasse TIniFile gebruikt de Windows API wat een limiet van 64 KB oplegt aan INI-bestanden. Als u meer dan 64 KB aan gegevens moet opslaan, moet u de TMemIniFile gebruiken.

Een ander probleem kan zich voordoen als u een sectie heeft met een waarde van meer dan 8 K. Een manier om het probleem op te lossen, is door uw eigen versie van de ReadSection-methode te schrijven.

instagram story viewer