Kā manipulēt ar INI failiem no Delphi

INI faili ir teksta faili, ko izmanto lietojumprogrammas konfigurācijas datu glabāšanai.

Pat ja Windows iesaka izmantot Windows reģistru, lai saglabātu lietojumprogrammas konfigurācijas datus, daudzos gadījumos jūs atradīsit, ka INI faili nodrošina ātrāku veidu, kā programma var piekļūt tās iestatījumiem. Pati Windows pat izmanto INI failus; desktop.ini un boot.ini ir tikai divi piemēri.

Viena vienkārša INI failu izmantošana kā statusa saglabāšanas mehānisms būtu formas saglabāšana un atrašanās vietas saglabāšana, ja vēlaties, lai veidlapa atkal parādītos iepriekšējā pozīcijā. Tā vietā, lai meklētu caur veselu informācijas datu bāze lai atrastu izmēru vai atrašanās vietu, tā vietā tiek izmantots INI fails.

INI faila formāts

Inicializācijas vai konfigurācijas iestatījumu fails (.INI) ir teksta fails ar 64 KB ierobežojumu, kas sadalīts sadaļās, no kurām katrā ir nulle vai vairāk taustiņu. Katrā taustiņā ir nulle vai vairāk vērtību.

Šis ir piemērs:

 [Sadaļas nosaukums]
atslēgas nosaukums1 = vērtība
; komentārs
atslēgas nosaukums2 = vērtība

instagram viewer

Sadaļu nosaukumi ir ievietotas kvadrātiekavās, un tām jāsākas rindas sākumā. Sadaļu un atslēgu nosaukumos nav reģistrjutības (lielapjoma nozīmei nav nozīmes), un tajos nedrīkst būt atstarpes rakstzīmes. atslēgas vārds seko vienādības zīme ("="), kuru pēc izvēles ieskauj atstarpes zīmes, kuras ignorē.

Ja viena un tā pati sadaļa tajā pašā failā parādās vairāk nekā vienu reizi vai ja viena un tā pati atslēga tajā pašā sadaļā parādās vairāk nekā vienu reizi, tad dominē pēdējais notikums.

Atslēga var saturēt virkne, vesels skaitlis vai Būlavērtību.​

Delfi IDE daudzos gadījumos izmanto INI faila formātu. Piemēram, .DSK faili (darbvirsmas iestatījumi) izmanto INI formātu.

TIniFile klase

Delphi nodrošina TIniFile klase, kas deklarēta inifiles.pas vienība ar metodēm, kā saglabāt un izgūt vērtības no INI failiem.

Pirms darba ar TIniFile metodēm jums jāizveido klases piemērs:

izmanto inifiles;
...
var
IniFile: TIniFile;
sākt
IniFile: = TIniFile. Izveidot ('myapp.ini');

Iepriekš minētais kods izveido IniFile objektu un piešķir “myapp.ini” vienīgajam klases īpašumam - Īpašums FileName —Izmanto, lai norādītu izmantojamā INI faila nosaukumu.

Iepriekš rakstītais kods meklē kodu myapp.ini failu \ Windows direktoriju. Labāks veids, kā glabāt lietojumprogrammas datus, ir lietojumprogrammas mapē - vienkārši norādiet pilnu faila ceļa nosaukumu Izveidot metode:

// ievietojiet INI lietojumprogrammu mapē,
// ļaujiet tai būt lietojumprogrammas nosaukumam
// un “ini” paplašināšanai:

iniFile: = TIniFile. Izveidot (. ExeName, '. Ini'));

Lasīšana no INI

TIniFile klasē ir vairākas "lasīšanas" metodes. ReadString skan a virknes vērtība no atslēgas, ReadInteger. ReadFloat un tamlīdzīgi tiek izmantoti, lai nolasītu numuru no taustiņa. Visām "lasīšanas" metodēm ir noklusējuma vērtība, ko var izmantot, ja ieraksts neeksistē.

Piemēram, ReadString tiek deklarēts kā:

funkcija ReadString (const Sadaļa, identitāte, noklusējums: stīga): stīga; ignorēt;

Rakstiet INI

TIniFile katrai lasīšanas metodei ir atbilstoša "rakstīšanas" metode. Tie ir WriteString, WriteBool, WriteInteger utt.

Piemēram, ja mēs vēlamies, lai programma atcerētos pēdējās personas vārdu, kura to izmantoja, kad tā bija, un kādas bija galvenās formas koordinātas, mēs varētu izveidot sadaļu ar nosaukumu Lietotāji, atslēgvārds ar nosaukumu Pēdējais, Datums lai izsekotu informāciju, un sadaļa ar nosaukumu Izvietojums ar taustiņiem Tops, Kreisais, Platums, un Augstums.

projekts1.ini
[Lietotājs]
Pēdējais = Zarko Gajičs
Datums = 01/29/2009
[Izvietojums]
Augšā = 20
Kreisais = 35
Platums = 500
Augstums = 340

Ņemiet vērā, ka atslēga nosaukta Pēdējais tur virknes vērtību, Datums tur TDateTime vērtību, un visas atslēgas Izvietojums Sadaļā ir vesela skaitļa vērtība.

Galvenās formas OnCreate notikums ir ideāla vieta, kur glabāt kodu, kas nepieciešams, lai piekļūtu lietojumprogrammas inicializācijas faila vērtībām:

procedūra TMainForm. FormCreate (Sūtītājs: TObject);
var
appINI: TIniFile;
LastUser: virkne;
LastDate: TDateTime;
sākt
appINI: = TIniFile. Izveidot (. ExeName, '. Ini'));
mēģiniet
// ja neviens pēdējais lietotājs neatdod tukšu virkni
LastUser: = appINI.ReadString ('Lietotājs', 'Pēdējais', '');
// ja pēdējais datums netiek atgriezts šodienas datumā
LastDate: = appINI.ReadDate ('Lietotājs', 'Datums', Datums);
// parādīt ziņojumu
ShowMessage ('Šo programmu iepriekš izmantoja' + LastUser + 'on' + DateToStr (LastDate));
Augšā: = appINI.ReadInteger ('Izvietojums', 'Augšējais', Augšējais);
Kreisais: = appINI.ReadInteger ('Izvietojums', 'Kreisais', Kreisais);
Platums: = appINI.ReadInteger ('Izvietojums', 'Platums', Platums);
Augstums: = appINI.ReadInteger ('Izvietojums', 'Augstums', Augstums);
beidzot
appINI.Free;
beigas;
beigas;

Galvenās formas OnClose pasākums ir ideāli piemērots Saglabājiet INI projekta daļa.

procedūra TMainForm. FormClose (Sūtītājs: TObject; var Darbība: TCloseAction);
var
appINI: TIniFile;
sākt
appINI: = TIniFile. Izveidot (. ExeName, '. Ini'));
mēģiniet
appINI.WriteString ('Lietotājs', 'Pēdējais', 'Zarko Gajičs');
appINI.WriteDate ('Lietotājs', 'Datums', Datums);
ar appINI, MainForm darīt
sākt
WriteInteger ('Izvietojums', 'Augšējais', Augšējais);
WriteInteger ('Izvietojums', 'Pa kreisi', Pa kreisi);
WriteInteger ('Izvietojums', 'Platums', Platums);
WriteInteger ('Izvietojums', 'Augstums', Augstums);
beigas;
beidzot
appIni. Bezmaksas;
beigas;
beigas;

INI sadaļas

EraseSection izdzēš visu INI faila sadaļu. LasītSekcija un LasītSekcijas aizpildiet TStringList objektu ar visu INI faila sadaļu nosaukumiem (un atslēgu nosaukumiem).

INI ierobežojumi un negatīvie punkti

TIniFile klase izmanto Windows API kas INI failiem uzliek 64 KB ierobežojumu. Ja jums jāuzglabā vairāk nekā 64 KB datu, jums jāizmanto TMemIniFile.

Cita problēma varētu rasties, ja jums ir sadaļa, kuras vērtība pārsniedz 8 K. Viens no veidiem, kā atrisināt problēmu, ir uzrakstīt savu ReadSection metodes versiju.