Работа с Ini-файлами в Delphi
Раньше, когда не было ещё славных файлов систем.dat и юзверь.dat, жили - были на винчестерах персо-
нальных компьютеров одни очень славные файлы. Назывались они INI-файлы и имели соответствующее рас-
ширение - "ini". Внешне они очень напоминали текстовые файлы и всегда с ними дружили. Даже
могли быть прочитаны и изменены одинаковыми программами - текстовыми редакторами. Но однажды на
INI-файлы обратили внимание другие - EXE-файлы. Им очень приглянулась структура INI-файлов. Послед-
ние были очень удобно, по мнению программ, поделены на разделы. Каждый раздел INI-файла начинался с
новой строки и имел свое имя. Имя раздела записывалось в квадратных скобках и было уникальным для
одного ини-файла. Разделы, в свою очередь, состояли из идентификаторов. Каждый идентификатор имел
свое имя, значение и записывался в ини-файле с новой строки. Имя и значение идентификатора разделя-
лось знаком "=". Злобные программы оккупировали ини-файлы и стали хранить в них свою информацию.
Так продолжалось довольно долго, пока на помощь ини-файлам не пришел добрый дядя по имени Билл.
К сожалению, фамилия этого героя как-то случайно стерлась из памяти винчестеров. Поговаривают, что
его стерли программы в отместку за освобожденные им ини-файлы. Так вот этот добрый дядя взял и соз-
дал непонятную штуку, которую назвал реестром. Программы могли использовать реестр для хранения
своих данных, однако текстовые редакторы не могли прочитать содержимое реестра: слишком уж там все
было запутано. Это обстоятельство порадовало программы, и почти все они освободили ини-файлы в
пользу реестра. Таким образом, ини-файлы снова стали свободны. Однако, почему-то они не смогли вер-
нуться к самостоятельной жизни и стали вымирать. И последней надеждой ини-файлов стал дядя Борман,
создатель "Дельфи" - программы для создания программ. Он включил в "Дельфи" модуль INIFILES, позво-
ляющий программам снова использовать ини-файлы для хранения данных. Это стало взаимовыгодным сот-
рудничеством: программы не дали исчезнуть ини-файлам, а те, в свою очередь, надежно хранили инфор-
мацию программ, поскольку реестр дяди Билла постоянно ее куда-то девал и не хотел отдавать обратно.
Так что давайте возрадуемся благородному поступку дяди Бормана и воспользуемся модулем INIFILES
для спасения популяции INI-файлов!
Почему иногда лучше использовать INI-файлы, а не реестр?
1. INI-файлы можно просмотреть и отредактировать в обычном блокноте.
2. Если INI-файл хранить в папке с программой, то при переносе папки на другой компьютер настройки
сохраняются.
3. Новичку в реестре можно запросто запутаться или (боже упаси), чего-нибудь не то изменить.
Поэтому для хранения параметров настройки программы удобно использовать стандартные INI файлы Windows.
Работа с INI файлами ведется при помощи объекта TIniFiles модуля IniFiles. Краткое описание методов
объекта TIniFiles дано ниже.
Constructor Create('d:\test.INI');
Создать экземпляр объекта и связать его с файлом. Если такого файла нет, то он создается, но только тогда, когда произведете в него запись информации.
WriteBool(const Section, Ident: string; Value: Boolean);
Присвоить элементу с именем Ident раздела Section значение типа boolean
WriteInteger(const Section, Ident: string; Value: Longint);
Присвоить элементу с именем Ident раздела Section значение типа Longint
WriteString(const Section, Ident, Value: string);
Присвоить элементу с именем Ident раздела Section значение типа String
ReadSection (const Section: string; Strings: TStrings);
Прочитать имена всех корректно описанных переменных раздела Section (некорректно описанные опускаются)
ReadSectionValues(const Section: string; Strings: TStrings);
Прочитать имена и значения всех корректно описанных переменных раздела Section. Формат :
имя_переменной = значение
EraseSection(const Section: string);
Удалить раздел Section со всем содержимым
ReadBool(const Section, Ident: string; Default: Boolean): Boolean;
Прочитать значение переменной типа Boolean раздела Section с именем Ident, и если его нет, то вместо него
подставить значение Default.
ReadInteger(const Section, Ident: string; Default: Longint): Longint;
Прочитать значение переменной типа Longint раздела Section с именем Ident, и если его нет, то вместо него
подставить значение Default.
ReadString(const Section, Ident, Default: string): string;
Прочитать значение переменной типа String раздела Section с именем Ident, и если его нет, то вместо него
подставить значение Default.
Free;
Закрыть и освободить ресурс. Необходимо вызвать при завершении работы с INI файлом
Property Values[const Name: string]: string;
Доступ к существующему параметру по имени Name
Пример :
Procedure TForm1.FormClose(Sender: TObject);
var
IniFile:TIniFile;
begin
IniFile := TIniFile.Create('d:\test.INI'); { Создали экземпляр объекта }
IniFile.WriteBool('Options', 'Sound', True); { Секция Options: Sound:=true }
IniFile.WriteInteger('Options', 'Level', 3); { Секция Options: Level:=3 }
IniFile.WriteString('Options' , 'Secret password', Pass);
{ Секция Options: в Secret password записать значение переменной Pass }
IniFile.ReadSection('Options ', memo1.lines); { Читаем имена переменных}
IniFile.ReadSectionValues('Options ', memo2.lines); { Читаем имена и значения }
IniFile.Free; { Закрыли файл, уничтожили объект и освободили память }
end;