Как да манипулирате INI файлове от Delphi

click fraud protection

INI файловете са текстови файлове, използвани за съхраняване на конфигурационни данни на приложение.

Въпреки че Windows препоръчва използването на системния регистър на Windows за съхранение на специфични за приложението конфигурационни данни, в много случаи ще откриете, че INI файловете осигуряват по-бърз начин на програмата за достъп до настройките му. Самият Windows дори използва INI файлове; desktop.ini и boot.ini са само два примера.

Една проста употреба на INI файлове като механизъм за запазване на състоянието е да запазите размера и местоположението на формуляр, ако искате формулярът да се появи отново на предишната му позиция. Вместо да търсите през едно цяло база данни с информация за да намерите размера или местоположението, вместо това се използва INI файл.

Форматът на файловете INI

Файлът за инициализация или настройки на конфигурацията (.INI) е текстов файл с ограничение от 64 KB, разделен на секции, всеки съдържащ нула или повече ключове. Всеки ключ съдържа нула или повече стойности.

instagram viewer

Ето пример:

 [SectionName]
keyname1 = стойност
; коментар
keyname2 = стойност

Имена на секции са затворени в квадратни скоби и трябва да започват в началото на ред. Имената на секции и ключове са нечувствителни към регистъра (случаят няма значение) и не могат да съдържат интервали от знаци. Най- ключово име е последван от знак за равенство ("="), по избор заобиколен от интервали, които се игнорират.

Ако един и същ раздел се появява повече от веднъж в един и същ файл или ако един и същ ключ се появява повече от веднъж в същия раздел, тогава последното събитие надделява.

Ключ може да съдържа низ, цяло число или булевастойност.​

Delphi IDE използва INI файловия формат в много случаи. Например, .DSK файлове (настройки на работния плот) използват INI формат.

Клас TIniFile

Delphi предоставя TIniFile клас, деклариран в inifiles.pas единица, с методи за съхраняване и извличане на стойности от INI файлове.

Преди да работите с методите TIniFile, трябва да създадете екземпляр от класа:

употреби inifiles;
...
Var
IniFile: TIniFile;
започвам
IniFile: = TIniFile. Създаване ( "myapp.ini ');

Горният код създава обект IniFile и присвоява 'myapp.ini' на единственото свойство на класа - the Свойство на FileName —Използва се за посочване на името на INI файла, който ще използвате.

Кодът, както е написано по-горе, търси myapp.ini файл в \ Windows директория. По-добър начин за съхраняване на данни за приложението е в папката на приложението - просто посочете пълното име на пътя на файла за създавам метод:

// поставете INI в папката с приложения,
// нека да има името на приложението
// и „ini“ за разширение:

iniFile: = TIniFile. Създаване (ChangeFileExt (Приложение) ExeName, '. Ini'));

Четене от INI

Класът TIniFile има няколко метода за „четене“. ReadString чете a стойност на низа от ключ, ReadInteger. ReadFloat и подобни се използват за четене на номер от ключ. Всички методи за "четене" имат стойност по подразбиране, която може да се използва, ако записът не съществува.

Например ReadString се декларира като:

функция ReadString (конст Секция, идентификатор, по подразбиране: низ): низ; Замяната;

Пишете на INI

TIniFile има съответен метод "запис" за всеки метод "четене". Те са WriteString, WriteBool, WriteInteger и т.н.

Например, ако искаме програма да запомни името на последния човек, който го е използвал, кога е бил и какви са основните координати на формата, може да създадем раздел, наречен Потребители, ключова дума, наречена последно, Дата за проследяване на информацията и раздел, наречен поставяне с ключове Горна част, Наляво, широчина, и височина.

project1.ini
[Потребител]
Последно = Зарко Гаич
Date = 01/29/2009
[Разположение]
Top = 20
Ляв = 35
Ширина = 500
Височина = 340

Обърнете внимание, че ключът е назован последно съдържа стойност на низ Дата съдържа стойност на TDateTime и всички клавиши в поставяне секция съдържа цяла стойност.

Събитието OnCreate на основната форма е идеалното място за съхраняване на кода, необходим за достъп до стойностите в инициализационния файл на приложението:

процедура TMainForm. FormCreate (подател: TObject);
Var
appINI: TIniFile;
LastUser: низ;
LastDate: TDateTime;
започвам
appINI: = TIniFile. Създаване (ChangeFileExt (Приложение) ExeName, '. Ini'));
опитвам
// ако никой последен потребител не върне празен низ
LastUser: = appINI.ReadString ('Потребител', 'Последен', '');
// ако няма последна дата да се върне днешната дата
LastDate: = appINI.ReadDate ('Потребител', 'Дата', Дата);
// покажете съобщението
ShowMessage ('Тази програма беше използвана преди от' + LastUser + 'on' + DateToStr (LastDate));
Най-горе: = appINI.ReadInteger („разположение“, „отгоре“, отгоре);
Отляво: = appINI.ReadInteger („Разположение“, „Ляво“, наляво);
Ширина: = appINI.ReadInteger („Разположение“, „Ширина“, Ширина);
Височина: = appINI.ReadInteger („Разположение“, „Височина“, Височина);
накрая
appINI.Free;
край;
край;

Събитието OnClose на основната форма е идеално за Запазете INI част от проекта.

процедура TMainForm. FormClose (подател: TObject; Var Действие: TCloseAction);
Var
appINI: TIniFile;
започвам
appINI: = TIniFile. Създаване (ChangeFileExt (Приложение) ExeName, '. Ini'));
опитвам
appINI.WriteString ('Потребител', 'Последен', 'Зарко Гаич');
appINI.WriteDate („Потребител“, „Дата“, Дата);
с appINI, MainForm правя
започвам
WriteInteger („Разположение“, „Най-горе“, отгоре);
WriteInteger („Поставяне“, „Ляво“, наляво);
WriteInteger („Разположение“, „Ширина“, Ширина);
WriteInteger („Поставяне“, „Височина“, Височина);
край;
накрая
appIni. Безплатно;
край;
край;

Раздели INI

Най- EraseSection изтрива цял раздел от INI файл. ReadSection и ReadSections попълнете TStringList обект с имената на всички секции (и имена на ключове) в INI файла.

INI Ограничения и недостатъци

Класът TIniFile използва API на Windows което налага лимит от 64 KB на INI файловете. Ако трябва да съхранявате повече от 64 KB данни, трябва да използвате TMemIniFile.

Друг проблем може да възникне, ако имате секция с повече от 8 K стойност. Един от начините за решаване на проблема е да напишете своя собствена версия на метода ReadSection.

instagram story viewer