Pliki INI to pliki tekstowe używane do przechowywania danych konfiguracyjnych aplikacji.
Nawet jeśli Windows zaleca korzystanie z rejestru systemu Windows do przechowywania danych konfiguracyjnych specyficznych dla aplikacji, w wielu przypadkach pliki INI zapewniają szybszy dostęp do ustawień programu. Sam system Windows używa nawet plików INI; desktop.ini i boot.ini będąc tylko dwoma przykładami.
Jednym prostym zastosowaniem plików INI jako mechanizmu oszczędzania statusu byłoby zapisanie rozmiaru i położenia formularza, jeśli chcesz, aby formularz pojawił się ponownie w poprzedniej pozycji. Zamiast przeszukiwać całość baza danych informacji aby znaleźć rozmiar lub lokalizację, zamiast tego używa się pliku INI.
Format pliku INI
Plik ustawień inicjalizacji lub konfiguracji (.INI) to plik tekstowy z limitem 64 KB podzielonym na sekcje, z których każda zawiera zero lub więcej kluczy. Każdy klucz zawiera zero lub więcej wartości.
Oto przykład:
[SectionName]
keyname1 = wartość
;komentarz
keyname2 = wartość
Nazwy sekcji są ujęte w nawiasy kwadratowe i muszą zaczynać się na początku linii. Nazwy sekcji i kluczy nie uwzględniają wielkości liter (wielkość liter nie ma znaczenia) i nie mogą zawierać znaków odstępów. The nazwa klucza po nim następuje znak równości („=”), opcjonalnie otoczony spacjami, które są ignorowane.
Jeśli ta sama sekcja pojawia się więcej niż jeden raz w tym samym pliku lub jeśli ten sam klucz pojawia się więcej niż jeden raz w tej samej sekcji, pierwszeństwo ma ostatnie wystąpienie.
Klucz może zawierać strunowy, liczba całkowita lub booleanwartość.
Delfy IDE używa formatu pliku INI w wielu przypadkach. Na przykład, Pliki .DSK (ustawienia pulpitu) wykorzystują format INI.
Klasa TIniFile
Delphi zapewnia TIniFile klasa, zadeklarowana w inifiles.pas jednostka z metodami przechowywania i pobierania wartości z plików INI.
Przed rozpoczęciem pracy z metodami TIniFile musisz utworzyć instancję klasy:
wykorzystuje niewoli;
...
var
IniFile: TIniFile;
zaczynać
IniFile: = TIniFile. Utwórz („myapp.ini”);
Powyższy kod tworzy obiekt IniFile i przypisuje „myapp.ini” do jedynej właściwości klasy - Właściwość FileName - służy do określania nazwy pliku INI, którego chcesz użyć.
Kod napisany powyżej szuka myapp.ini plik w \ Windows informator. Lepszym sposobem przechowywania danych aplikacji jest folder aplikacji - wystarczy podać pełną nazwę pliku dla pliku Stwórz metoda:
// umieść INI w folderze aplikacji,
// niech ma nazwę aplikacji
// i „ini” dla rozszerzenia:
iniFile: = TIniFile. Utwórz (ChangeFileExt (Application. ExeName, „. Ini”));
Czytanie z INI
Klasa TIniFile ma kilka metod „odczytu”. ReadString czyta a wartość ciągu z klucza ReadInteger. ReadFloat i podobne są używane do odczytu liczby z klucza. Wszystkie metody „odczytu” mają wartość domyślną, której można użyć, jeśli pozycja nie istnieje.
Na przykład ReadString jest zadeklarowany jako:
funkcjonować ReadString (const Section, Ident, Default: String): String; nadpisanie;
Napisz do INI
TIniFile ma odpowiednią metodę „zapisu” dla każdej metody „odczytu”. Są to WriteString, WriteBool, WriteInteger itp.
Na przykład, jeśli chcemy, aby program zapamiętał nazwisko ostatniej osoby, która go używał, kiedy to było i jakie były główne współrzędne formularza, moglibyśmy utworzyć sekcję o nazwie Użytkownicy, słowo kluczowe o nazwie Ostatni, ubiegły, zeszły, Data do śledzenia informacji i sekcji o nazwie Umieszczenie z kluczami Top, Lewo, Szerokość, i Wysokość.
project1.ini
[Użytkownik]
Last = Zarko Gajic
Data = 01/29/2009
[Umieszczenie]
Top = 20
Lewo = 35
Szerokość = 500
Wysokość = 340
Zauważ, że klucz o nazwie Ostatni, ubiegły, zeszły posiada wartość ciągu, Data zawiera wartość TDateTime i wszystkie klucze w Umieszczenie sekcja zawiera wartość całkowitą.
Zdarzenie OnCreate w głównym formularzu jest idealnym miejscem do przechowywania kodu potrzebnego do uzyskania dostępu do wartości w pliku inicjalizacji aplikacji:
procedura TMainForm. FormCreate (Sender: TObject);
var
appINI: TIniFile;
LastUser: string;
LastDate: TDateTime;
zaczynać
appINI: = TIniFile. Utwórz (ChangeFileExt (Application. ExeName, „. Ini”));
próbować
// jeśli żaden ostatni użytkownik nie zwróci pustego ciągu
LastUser: = appINI.ReadString („Użytkownik”, „Ostatni”, „”);
// jeśli data ostatniej daty nie jest aktualna
LastDate: = appINI.ReadDate („Użytkownik”, „Data”, Data);
// pokaż wiadomość
ShowMessage ('Ten program był wcześniej używany przez' + LastUser + 'on' + DateToStr (LastDate));
Góra: = appINI.ReadInteger („Umieszczenie”, „Góra”, Góra);
Po lewej: = appINI.ReadInteger („Umieszczenie”, „Po lewej”, po lewej);
Szerokość: = appINI.ReadInteger („Umieszczenie”, „Szerokość”, Szerokość);
Wysokość: = appINI.ReadInteger („Umieszczenie”, „Wysokość”, Wysokość);
Wreszcie
appINI.Free;
koniec;
koniec;
Zdarzenie OnClose głównej formy jest idealne dla Zapisz INI część projektu.
procedura TMainForm. FormClose (Sender: TObject; var Działanie: TCloseAction);
var
appINI: TIniFile;
zaczynać
appINI: = TIniFile. Utwórz (ChangeFileExt (Application. ExeName, „. Ini”));
próbować
appINI.WriteString („Użytkownik”, „Ostatni”, „Zarko Gajic”);
appINI.WriteDate („Użytkownik”, „Data”, Data);
z appINI, MainForm robić
zaczynać
WriteInteger („Umieszczenie”, „Góra”, Góra);
WriteInteger („Placement”, „Left”, Left);
WriteInteger („Umieszczenie”, „Szerokość”, Szerokość);
WriteInteger („Umieszczenie”, „Wysokość”, Wysokość);
koniec;
Wreszcie
appIni. Darmowy;
koniec;
koniec;
Sekcje INI
The EraseSection usuwa całą sekcję pliku INI. ReadSection i Sekcje Read wypełnij obiekt TStringList nazwami wszystkich sekcji (i nazw kluczy) w pliku INI.
Ograniczenia i wady INI
Używa klasy TIniFile interfejs API systemu Windows co nakłada limit 64 KB na pliki INI. Jeśli chcesz przechowywać więcej niż 64 KB danych, powinieneś użyć TMemIniFile.
Kolejny problem może powstać, jeśli masz sekcję o wartości większej niż 8 K. Jednym ze sposobów rozwiązania tego problemu jest napisanie własnej wersji metody ReadSection.