Az INI fájlok szöveges alapú fájlok, amelyeket az alkalmazás konfigurációs adatainak tárolására használnak.
Annak ellenére ablakok javasolja a Windows Registry használatát az alkalmazás-specifikus konfigurációs adatok tárolására, sok esetben azt találja, hogy az INI fájlok gyorsabban biztosítják a program számára a beállítások elérését. Maga a Windows INI fájlokat is használ; desktop.ini és boot.ini mindössze két példa.
Az INI fájlok állapotmegtakarítási mechanizmusként történő egyszerű használata az űrlap méretének és helyének mentése, ha azt szeretné, hogy az űrlap az előző pozíciójában jelenjen meg. Ahelyett, hogy átkutatnánk egy egészet információ adatbázis a méret vagy a hely megkereséséhez INI fájlt használnak.
Az INI fájlformátum
Az Inicializáló vagy Konfigurációs beállítások fájl (.INI) egy 64 KB-os korlátú, szekciókra osztott szövegfájl, amelyek mindegyike nullát vagy annál több kulcsot tartalmaz. Minden gomb nullát vagy annál több értéket tartalmaz.
Íme egy példa:
[Szakasznév]
keyname1 = érték
;megjegyzés
keyname2 = érték
Szekciók neve szögletes zárójelben vannak, és a sor elején kell kezdődni. A szekció- és kulcsnevek a kis- és nagybetűket nem érzékenyek (az esetnek nem számít), és nem tartalmazhatnak szóközt. Az kulcs neve után egy egyenlőségjel ("=") követ, amelyet opcionálisan szóköz karakter vesz körül, amelyet figyelmen kívül hagynak.
Ha ugyanaz a szakasz többször is megjelenik ugyanabban a fájlban, vagy ha ugyanaz a kulcs többször is megjelenik ugyanabban a szakaszban, akkor az utolsó előfordulás az irányadó.
Egy kulcs tartalmazhat húr, egész szám vagy logikaiérték.
Delphi Az IDE sok esetben az INI fájlformátumot használja. Például, .DSK fájlok (asztali beállítások) az INI formátumot használja.
TIniFile osztály
A Delphi biztosítja a TIniFile osztály, amelyet a inifiles.pas egység, az értékek INI fájlok tárolására és lekérésére szolgáló módszerekkel.
A TIniFile metódusokkal való munka megkezdése előtt létre kell hoznia egy osztálypéldányt:
felhasználások inifiles;
...
var
IniFile: TIniFile;
kezdődik
IniFile: = TIniFile. Létrehozása (myapp.ini ');
A fenti kód létrehoz egy IniFile objektumot, és a 'myapp.ini' címet az osztály egyetlen tulajdonságához - a FileName tulajdonság —Az a használni kívánt INI fájl nevének megadására szolgál.
A fent írt kód a myapp.ini fájl a \Ablakok Könyvtár. Az alkalmazás adatainak tárolásának jobb módja az alkalmazás mappájában található - csak adja meg a fájl teljes elérési útját az teremt eljárás:
// tegye az INI-t az alkalmazás mappájába,
// legyen az alkalmazás neve
// és „ini” a kiterjesztéshez:
iniFile: = TIniFile. Létrehozás (ChangeFileExt (Alkalmazás. ExeName, '. Ini'));
Olvasás az INI-ből
A TIniFile osztály számos „olvasási” módszert alkalmaz. A ReadString beolvassa a string érték egy kulcsból, ReadInteger. A ReadFloat és hasonlók számot olvasnak el egy kulcsból. Az összes "olvasási" módszernek van egy alapértelmezett értéke, amelyet akkor lehet használni, ha a bejegyzés nem létezik.
Például a ReadString deklarálva:
funkció ReadString (const Szekció, azonosító, alapértelmezett: karakterlánc): karakterlánc; felülírás;
Írja az INI-nek
A TIniFile-nek van megfelelő "írási" módszere minden egyes "olvasási" módszerhez. Ezek a WriteString, WriteBool, WriteInteger stb.
Például, ha azt szeretnénk, hogy egy program emlékezzen az utoljára használt személy nevére, mikor volt, és mi volt a fő alakkoordináták, akkor létrehozhatunk egy szakaszt, amelynek neve felhasználók, az úgynevezett kulcsszó Utolsó, Dátum az információk nyomon követésére, és egy szakasz hívott Elhelyezés gombokkal felső, Bal, Szélességés Magasság.
project1.ini
[Felhasználó]
Utolsó = Zarko Gajic
Dátum értékének 01/29/2009-es
[Elhelyezés]
Top = 20
Bal = 35
Szélesség = 500
Height = 340
Vegye figyelembe, hogy a nevű kulcs Utolsó egy string értéket tart, Dátum a TDateTime értéket, és az összes kulcsot tartalmazza Elhelyezés szakasz egész számot tart.
A fő forma OnCreate eseménye a tökéletes hely az alkalmazás inicializációs fájljában található értékek eléréséhez szükséges kód tárolására:
eljárás Megadott. FormCreate (Feladó: TObject);
var
appINI: TIniFile;
Utolsó felhasználó: string;
LastDate: TDateTime;
kezdődik
appINI: = TIniFile. Létrehozás (ChangeFileExt (Alkalmazás. ExeName, '. Ini'));
próbáld ki
// ha egyik utolsó felhasználó sem ad vissza egy üres karakterláncot
LastUser: = appINI.ReadString ('Felhasználó', 'Utolsó', '');
// ha nincs utolsó dátum, akkor visszatér a mai dátumhoz
LastDate: = appINI.ReadDate ('Felhasználó', 'Dátum', Dátum);
// az üzenet megjelenítése
ShowMessage ('Ezt a programot korábban a' + LastUser + 'használta' + DateToStr (LastDate));
Top: = appINI.ReadInteger ('Elhelyezés', 'Felül', Felül);
Balra: = appINI.ReadInteger ('Elhelyezés', 'Balra', Balra);
Szélesség: = appINI.ReadInteger ('Elhelyezés', 'Szélesség', Szélesség);
Magasság: = appINI.ReadInteger ('Elhelyezés', 'Magasság', Magasság);
végül
appINI.Free;
vég;
vég;
A fő forma OnClose rendezvénye ideális a Mentsd az INI-t a projekt része.
eljárás Megadott. FormClose (feladó: TObject; var Művelet: TCloseAction);
var
appINI: TIniFile;
kezdődik
appINI: = TIniFile. Létrehozás (ChangeFileExt (Alkalmazás. ExeName, '. Ini'));
próbáld ki
appINI.WriteString ('Felhasználó', 'Utolsó', 'Zarko Gajic');
appINI.WriteDate ('Felhasználó', 'Dátum', Dátum);
val vel appINI, MainForm csinál
kezdődik
WriteInteger ('Elhelyezés', 'Felül', Fel);
WriteInteger ('Elhelyezés', 'Balra', Balra);
WriteInteger ('Elhelyezés', 'Szélesség', Szélesség);
WriteInteger ('Elhelyezés', 'Magasság', Magasság);
vég;
végül
appIni. Ingyenes;
vég;
vég;
INI szakaszok
Az EraseSection egy INI fájl teljes szakaszát törli. ReadSection és ReadSections töltsön ki egy TStringList objektumot az INI fájlban található összes szakasz (és kulcsnév) nevével.
INI korlátozások és hátrányok
A TIniFile osztály használja a Windows API amely 64 KB korlátot szab az INI fájlok számára. Ha 64 KB-nál több adatot kell tárolnia, akkor használja a TMemIniFile fájlt.
Egy másik probléma merülhet fel, ha 8-nál nagyobb értéket mutat. A probléma megoldásának egyik módja a ReadSection módszer saját verziójának megírása.