Fișierele INI sunt fișiere pe bază de text utilizate pentru stocarea datelor de configurare a unei aplicații.
Chiar dacă ferestre recomandă utilizarea Registrului Windows pentru a stoca date de configurare specifice aplicației, în multe cazuri, veți vedea că fișierele INI oferă o modalitate mai rapidă pentru ca programul să acceseze setările sale. Windows în sine folosește chiar fișiere INI; Desktop.ini și Boot.ini fiind doar două exemple.
O simplă utilizare a fișierelor INI ca mecanism de salvare a stării ar fi salvarea dimensiunii și a locației unui formular dacă doriți să reapară un formular în poziția sa anterioară. În loc de a căuta prin un întreg baza de date de informatii pentru a găsi dimensiunea sau locația, se folosește un fișier INI.
Formatul de fișier INI
Fișierul de inițializare sau setări de configurare (.INI) este un fișier text cu o limită de 64 KB împărțit în secțiuni, fiecare conținând zero sau mai multe chei. Fiecare cheie conține zero sau mai multe valori.
Iată un exemplu:
[Numesectiune]
keyname1 = valoarea
;cometariu
keyname2 = valoarea
Numele secțiunii sunt închise între paranteze și trebuie să înceapă la începutul unei linii. Numele de secțiuni și cheie sunt sensibile la majuscule (majuscule) și nu pot conține caractere spațiale. numele cheii este urmat de un semn egal ("="), opțional înconjurat de caractere spațiere, care sunt ignorate.
Dacă aceeași secțiune apare de mai multe ori în același fișier sau dacă aceeași cheie apare de mai multe ori în aceeași secțiune, atunci predomină ultima apariție.
O cheie poate conține şir, întreg, sau booleanvaloare.
Delphi IDE folosește formatul de fișier INI în multe cazuri. De exemplu, Fișiere .DSK (setări desktop) utilizează formatul INI.
Clasa TIniFile
Delphi oferă TIniFile clasa, declarată în inifiles.pas unitate, cu metode de stocare și preluare a valorilor din fișierele INI.
Înainte de a lucra cu metodele TIniFile, trebuie să creați o instanță a clasei:
utilizări inifiles;
...
var
IniFile: TIniFile;
începe
IniFile: = TIniFile. Crearea ( 'myapp.ini');
Codul de mai sus creează un obiect IniFile și atribuie „myapp.ini” singurei proprietăți a clasei - Proprietate FileName —Folosit pentru a specifica numele fișierului INI pe care îl veți utiliza.
Codul scris mai sus arată că myapp.ini fișier în \ Windows director. O modalitate mai bună de a stoca datele aplicației este în folderul aplicației - specificați doar numele complet al fișierului pentru Crea metodă:
// plasați INI în folderul aplicației,
// lasă-l să aibă numele aplicației
// și „ini” pentru extensie:
iniFile: = TIniFile. Creați (ChangeFileExt (aplicație). ExeName, '. Ini'));
Citind din INI
Clasa TIniFile are mai multe metode „citite”. ReadString citeste a valoarea stringului dintr-o cheie, ReadInteger. ReadFloat și altele similare sunt utilizate pentru a citi un număr dintr-o cheie. Toate metodele „citite” au o valoare implicită care poate fi folosită dacă intrarea nu există.
De exemplu, ReadString este declarat ca:
funcţie ReadString (const Secțiune, Ident, Default: String): String; trece peste;
Scrieți la INI
TIniFile are o metodă de „scriere” corespunzătoare pentru fiecare metodă „citită”. Sunt WriteString, WriteBool, WriteInteger etc.
De exemplu, dacă dorim ca un program să amintească numele ultimei persoane care l-a folosit, când a fost și care au fost coordonatele principale ale formularului, am putea stabili o secțiune numită Utilizatori, un cuvânt cheie numit Ultimul, Data pentru a urmări informațiile și o secțiune numită Destinație de plasare cu chei Top, Stânga, Lăţime, și Înălţime.
project1.ini
[Utilizator]
Ultima = Zarko Gajic
Data = 01/29/2009
[Plasare]
Top 20 =
Stânga = 35
Lățime = 500
Inaltime = 340
Rețineți că cheia numită Ultimul deține o valoare de șir, Data deține o valoare TDateTime și toate tastele din Destinație de plasare secțiunea ține o valoare întreagă.
Evenimentul OnCreate al formularului principal este locul perfect pentru a stoca codul necesar pentru a accesa valorile din fișierul de inițializare al aplicației:
procedură Template. FormCreate (Expeditor: TObject);
var
appINI: TIniFile;
LastUser: string;
LastDate: TDateTime;
începe
appINI: = TIniFile. Creați (ChangeFileExt (aplicație). ExeName, '. Ini'));
încerca
// dacă niciun ultim utilizator nu returnează un șir gol
LastUser: = appINI.ReadString ('User', 'Last', '');
// dacă nu există data de întoarcere a datei de astăzi
LastDate: = appINI.ReadDate ('Utilizator', 'Data', Data);
// arata mesajul
ShowMessage ('Acest program a fost folosit anterior de' + LastUser + 'pe' + DateToStr (LastDate));
Sus: = appINI.ReadInteger ('Plasament', 'Top', Top);
Stânga: = appINI.ReadInteger ('Plasament', 'Stânga', Stânga);
Lățime: = appINI.ReadInteger ('Plasament', 'Lățime', Lățime);
Înălțime: = appINI.ReadInteger ('Plasament', 'Înălțime', Înălțime);
in cele din urma
appINI.Free;
Sfârșit;
Sfârșit;
Evenimentul OnClose al formei principale este ideal pentru Salvați INI o parte din proiect.
procedură Template. FormClose (expeditor: TObject; var Acțiune: TCloseAction);
var
appINI: TIniFile;
începe
appINI: = TIniFile. Creați (ChangeFileExt (aplicație). ExeName, '. Ini'));
încerca
appINI.WriteString ('User', 'Last', 'Zarko Gajic');
appINI.WriteDate ('Utilizator', 'Data', Data);
cu appINI, MainForm do
începe
WriteInteger ('Plasament', 'Top', Top);
WriteInteger („Plasament”, „Stânga”, Stânga);
WriteInteger ('Plasament', 'Lățime', Lățime);
WriteInteger („Plasament”, „Înălțime”, Înălțime);
Sfârșit;
in cele din urma
appIni. Liber;
Sfârșit;
Sfârșit;
Secții INI
EraseSection șterge o secțiune întreagă a unui fișier INI. ReadSection și ReadSections completați un obiect TStringList cu numele tuturor secțiunilor (și nume cheie) din fișierul INI.
Limitări INI și dezavantaje
Clasa TIniFile folosește API-ul Windows care impune o limită de 64 KB fișierelor INI. Dacă trebuie să stocați mai mult de 64 KB de date, ar trebui să utilizați TMemIniFile.
O altă problemă ar putea apărea dacă aveți o secțiune cu o valoare mai mare de 8 K. O modalitate de a rezolva problema este de a scrie propria versiune a metodei ReadSection.