Работа с 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;
Hosted by uCoz