Hvordan manipulere INI-filer fra Delphi

INI-filer er tekstbaserte filer som brukes til å lagre konfigurasjonsdata for et program.

Selv om Windows anbefaler å bruke Windows-registeret til å lagre applikasjonsspesifikke konfigurasjonsdata, i mange tilfeller vil du finne at INI-filer gir en raskere måte for programmet å få tilgang til innstillingene. Windows bruker selv INI-filer; Desktop.ini og boot.ini å være bare to eksempler.

En enkel bruk av INI-filer som status lagringsmekanisme ville være å lagre størrelsen og plasseringen til et skjema hvis du vil at et skjema skal dukke opp igjen på sin forrige posisjon. I stedet for å søke gjennom en helhet database med informasjon For å finne størrelse eller plassering, brukes en INI-fil i stedet.

INI-filformatet

Initialiserings- eller konfigurasjonsinnstillingsfil (.INI) er en tekstfil med en 64 KB-grense delt inn i seksjoner, hver inneholder null eller flere taster. Hver tast inneholder null eller flere verdier.

Her er et eksempel:

 [Section]
keyname1 = verdien
;kommentar
keyname2 = verdien

instagram viewer

Seksjonsnavn er innelukket i firkantede parenteser og må begynne på begynnelsen av en linje. Seksjons- og nøkkelnavn er små og store bokstaver (saken betyr ikke noe) og kan ikke inneholde avstandstegn. De nøkkelnavn blir fulgt av et likhetstegn ("="), eventuelt omgitt av avstandstegn, som blir ignorert.

Hvis den samme delen vises mer enn en gang i den samme filen, eller hvis den samme nøkkelen vises mer enn en gang i den samme delen, vil den siste forekomsten være gjeldende.

En nøkkel kan inneholde string, heltall, eller booleanverdi.​

Delphi IDE bruker INI-filformatet i mange tilfeller. For eksempel, .DSK filer (skrivebordsinnstillinger) bruker INI-formatet.

TIniFile Class

Delphi gir TIniFile klasse, erklært i inifiles.pas enhet, med metoder for å lagre og hente verdier fra INI-filer.

Før du arbeider med TIniFile-metodene, må du opprette en forekomst av klassen:

bruker inifiles;
...
Var
IniFile: TIniFile;
begynne
IniFile: = TIniFile. Lag ( 'myapp.ini');

Koden ovenfor oppretter et IniFile-objekt og tildeler 'myapp.ini' til den eneste egenskapen til klassen - the FileName-egenskapen — Brukes til å spesifisere navnet på INI-filen du skal bruke.

Koden som skrevet ovenfor ser etter myapp.ini fil i \ Windows katalogen. En bedre måte å lagre applikasjonsdata er i programmets mappe - bare angi det fulle banenavnet til filen for Skape metode:

// plasser INI i applikasjonsmappen,
// la den ha applikasjonsnavnet
// og 'ini' for utvidelse:

iniFile: = TIniFile. Opprett (ChangeFileExt (Application). ExeName, '. Ini'));

Lesing fra INI

TIniFile-klassen har flere "lese" metoder. ReadString leser a strengverdi fra en nøkkel, ReadInteger. ReadFloat og lignende brukes til å lese et nummer fra en nøkkel. Alle "lest" -metoder har en standardverdi som kan brukes hvis oppføringen ikke eksisterer.

For eksempel blir ReadString erklært som:

funksjon ReadString (konst Seksjon, Ident, Standard: String): String; overstyring;

Skriv til INI

TIniFile har en tilsvarende "skrivemetode" for hver "lest" -metode. De er WritString, WritBool, WritInteger, etc.

Hvis vi for eksempel vil at et program skal huske navnet på den siste personen som brukte det, når det var det, og hva hovedformkoordinatene var, kan vi opprette et avsnitt som heter brukere, et nøkkelord som heter Siste, Dato for å spore informasjonen, og et avsnitt som heter plassering med nøkler Topp, Venstre, Bredde, og Høyde.

project1.ini
[Bruker]
Siste = Zarko Gajic
Date = 01/29/2009
[Plasserings]
Top = 20
Venstre = 35
Width = 500
Height = 340

Merk at tasten som heter Siste har en strengverdi, Dato har en TDateTime-verdi, og alle nøkler i plassering seksjonen har en heltallverdi.

OnCreate-hendelsen i hovedskjemaet er det perfekte stedet å lagre koden som trengs for å få tilgang til verdiene i applikasjonens initialiseringsfil:

fremgangsmåte TMainForm. FormCreate (avsender: TObject);
Var
appINI: TIniFile;
LastUser: streng;
LastDate: TDateTime;
begynne
appINI: = TIniFile. Opprett (ChangeFileExt (Application). ExeName, '. Ini'));
prøve
// hvis ingen siste bruker returnerer en tom streng
LastUser: = appINI.ReadString ('Bruker', 'Siste', '');
// hvis ingen siste dato returnerer dagens dato
LastDate: = appINI.ReadDate ('Bruker', 'Dato', Dato);
// vis meldingen
ShowMessage ('Dette programmet ble tidligere brukt av' + LastUser + 'på' + DateToStr (LastDate));
Topp: = appINI.ReadInteger ('Plassering', 'Topp', Topp);
Venstre: = appINI.ReadInteger ('Plassering', 'Venstre', Venstre);
Bredde: = appINI.ReadInteger ('Plassering', 'Bredde', Bredde);
Høyde: = appINI.ReadInteger ('Plassering', 'Høyde', Høyde);
endelig
appINI.Free;
slutt;
slutt;

Hovedformens OnClose-hendelse er ideell for Lagre INI del av prosjektet.

fremgangsmåte TMainForm. FormClose (avsender: TObject; Var Handling: TCloseAction);
Var
appINI: TIniFile;
begynne
appINI: = TIniFile. Opprett (ChangeFileExt (Application). ExeName, '. Ini'));
prøve
appINI.WriteString ('Bruker', 'Siste', 'Zarko Gajic');
appINI.WriteDate ('Bruker', 'Dato', Dato);
med appINI, MainForm gjøre
begynne
WritInteger ('Plassering', 'Topp', Topp);
WritInteger ('Plassering', 'Venstre', Venstre);
WritInteger ('Plassering', 'Bredde', Bredde);
WritInteger ('Plassering', 'Høyde', Høyde);
slutt;
endelig
appIni. Gratis;
slutt;
slutt;

INI-seksjoner

De EraseSection sletter en hel del av en INI-fil. ReadSection og ReadSections fyll ut et TStringList-objekt med navnene på alle seksjoner (og nøkkelnavn) i INI-filen.

INI Begrensninger og ulemper

TIniFile-klassen bruker Windows API som pålegger INI-filer en grense på 64 KB. Hvis du trenger å lagre mer enn 64 KB data, bør du bruke TMemIniFile.

Et annet problem kan oppstå hvis du har en seksjon med mer enn 8 K verdi. En måte å løse problemet på er å skrive din egen versjon av ReadSection-metoden.