INI-filer er tekstbaserede filer, der bruges til at gemme et applikations konfigurationsdata.
Selv om vinduer anbefaler, at du bruger Windows-registreringsdatabasen til at gemme applikationsspecifikke konfigurationsdata, i mange tilfælde finder du, at INI-filer giver en hurtigere måde for programmet at få adgang til dets indstillinger. Windows bruger endda INI-filer; Desktop.ini og boot.ini kun to eksempler.
Én enkel brug af INI-filer som en statusbesparende mekanisme ville være at gemme størrelsen og placeringen af en formular, hvis du ønsker, at en formular skal dukke op igen på sin tidligere position. I stedet for at søge gennem en helhed database med information for at finde størrelsen eller placeringen bruges i stedet en INI-fil.
INI-filformatet
Initialiserings- eller konfigurationsindstillingsfil (.INI) er en tekstfil med en 64 KB-grænse opdelt i sektioner, der hver indeholder nul eller flere taster. Hver tast indeholder nul eller flere værdier.
Her er et eksempel:
[SectionName]
keyname1 = værdi
;kommentar
keyname2 = værdi
Sektionsnavne er lukket i firkantede parenteser og skal begynde i begyndelsen af en linje. Sektions- og nøglenavne er store og små følsomme (sagen betyder ikke noget) og kan ikke indeholde afstandstegn. Det nøglenavn efterfølges af et lige tegn ("="), eventuelt omgivet af afstandstegn, der ignoreres.
Hvis den samme sektion vises mere end én gang i den samme fil, eller hvis den samme nøgle vises mere end én gang i den samme sektion, er den sidste forekomst fremherskende.
En nøgle kan indeholde snor, heltal eller booleanværdi.
Delphi IDE bruger INI-filformatet i mange tilfælde. For eksempel, .DSK filer (desktopindstillinger) anvender INI-formatet.
TIniFile-klasse
Delphi leverer TIniFile klasse, erklæret i inifiles.pas enhed, med metoder til at gemme og hente værdier fra INI-filer.
Før du arbejder med TIniFile-metoderne, skal du oprette en forekomst af klassen:
anvendelser inifiles;
...
Var
IniFile: TIniFile;
begynde
IniFile: = TIniFile. Opret ( 'myapp.ini');
Ovenstående kode opretter et IniFile-objekt og tildeler 'myapp.ini' til klassens eneste egenskab - the FileName egenskab —Anvendes til at specificere navnet på den INI-fil, du skal bruge.
Koden som beskrevet ovenfor ser efter myapp.ini fil i \ Windows vejviser. En bedre måde at gemme applikationsdata er i programmets mappe - angiv bare det fulde stienavn for filen til skab metode:
// placere INI i applikationsmappen,
// lad det have applikationsnavnet
// og 'ini' til udvidelse:
iniFile: = TIniFile. Opret (ChangeFileExt (Application). ExeName, '. Ini'));
Læser fra INI
TIniFile-klassen har flere "læste" metoder. ReadString læser a strengværdi fra en nøgle, ReadInteger. ReadFloat og lignende bruges til at læse et tal fra en nøgle. Alle "læste" metoder har en standardværdi, der kan bruges, hvis posten ikke findes.
For eksempel erklæres ReadString som:
fungere ReadString (const Sektion, ident, standard: streng): streng; overstyring;
Skriv til INI
TIniFile har en tilsvarende "skriv" -metode for hver "læst" metode. De er WritString, WritBool, WritInteger osv.
For eksempel, hvis vi ønsker, at et program skal huske navnet på den sidste person, der brugte det, når det var, og hvad de vigtigste formkoordinater var, kan vi muligvis oprette et afsnit, der hedder Brugere, et nøgleord kaldet Sidst, Dato for at spore informationen og et afsnit kaldet Placering med nøgler Top, Venstre, Bredde, og Højde.
project1.ini
[Bruger]
Sidste = Zarko Gajic
Dato = 01/29/2009
[Placering]
Top = 20
Venstre = 35
Bredde = 500
Højde = 340
Bemærk at den navngivne nøgle Sidst har en strengværdi, Dato har en TDateTime-værdi og alle nøgler i Placering sektion har en heltalværdi.
OnCreate-begivenheden med hovedformularen er det perfekte sted at gemme den kode, der er nødvendig for at få adgang til værdierne i programmets initialiseringsfil:
procedure TMainForm. FormCreate (Afsender: TObject);
Var
appINI: TIniFile;
LastUser: streng;
LastDate: TDateTime;
begynde
appINI: = TIniFile. Opret (ChangeFileExt (Application). ExeName, '. Ini'));
prøve
// hvis ingen sidste bruger returnerer en tom streng
LastUser: = appINI.ReadString ('Bruger', 'Sidste', '');
// hvis ingen sidste dato vender tilbage til dagens dato
LastDate: = appINI.ReadDate ('Bruger', 'Dato', Dato);
// Vis beskeden
ShowMessage ('Dette program blev tidligere brugt af' + LastUser + 'på' + DateToStr (LastDate));
Top: = appINI.ReadInteger ('Placering', 'Top', Top);
Venstre: = appINI.ReadInteger ('Placering', 'Venstre', Venstre);
Bredde: = appINI.ReadInteger ('Placering', 'Bredde', Bredde);
Højde: = appINI.ReadInteger ('Placering', 'Højde', Højde);
endelig
appINI.Free;
ende;
ende;
Hovedformularens OnClose-begivenhed er ideel til Gem INI del af projektet.
procedure TMainForm. FormClose (Afsender: TObject; Var Handling: TCloseAction);
Var
appINI: TIniFile;
begynde
appINI: = TIniFile. Opret (ChangeFileExt (Application). ExeName, '. Ini'));
prøve
appINI.WriteString ('Bruger', 'Sidste', 'Zarko Gajic');
appINI.WriteDate ('Bruger', 'Dato', Dato);
med appINI, MainForm gøre
begynde
WriteInteger ('Placering', 'Top', Top);
WriteInteger ('Placering', 'Venstre', Venstre);
WriteInteger ('Placering', 'Bredde', Bredde);
WriteInteger ('Placering', 'Højde', Højde);
ende;
endelig
appIni. Gratis;
ende;
ende;
INI-afsnit
Det EraseSection sletter en hel del af en INI-fil. ReadSection og ReadSections udfyld et TStringList-objekt med navnene på alle sektioner (og nøglenavne) i INI-filen.
INI Begrænsninger og ulemper
TIniFile-klassen bruger Windows API hvilket pålægger INI-filer en grænse på 64 KB. Hvis du har brug for at gemme mere end 64 KB data, skal du bruge TMemIniFile.
Et andet problem kan opstå, hvis du har et afsnit med mere end 8 K-værdi. En måde at løse problemet på er at skrive din egen version af ReadSection-metoden.