Работа с ini файлами в Delphi

 

 

Вообще, ini-файлы – очень удобная вещь. В ini-файл можно записать практически всё, хотя создан он в основном для хранения настроек программы.

Структура ini-файла очень проста: весь файл поделён на секции. В секциях содержатся ключи и эти ключи хранят значения. Вот пример открытого в блокноте ini-файла:

 

[Form properties]

Width=450

Height=320

Left=10

Top=35

 

[Application properties]

Dir=C:\Мои документы\Musuc

Date=28.09.02

 

В этом ини-файле, как мы видим, 2 секции: Form properties и Application properties. В каждой из этих секций есть ключи, содержащие числа, строковые выражения, дату. Запись в файл осуществляется путём указания секции ини-файла, названия ключа и указания самого значения. Ниже я опишу способы использования ини-файла на Borland Delphi.

 

Для работы с ини-файлами в Delphi существует модуль IniFiles. В нём описан нужный нам класс TIniFile.

1. Включите Delphi и создайте новый проект.

2. Допишите в Uses новый модуль IniFiles.

3. Создайте глобальную переменную класса TIniFile.

 

var

  Form1: TForm1;

  IniFile: TIniFile;

 

4. При создании формы надо инициализировать переменную IniFile:

 

procedure TForm1.FormCreate(Sender: TObject);

begin

  IniFile:=TIniFile.Create('C:\Program files\MyApplication\MyIni.ini');

end;

 

Инициализация проходит с участием дополнительного параметра типа string. Это имя файла. Если имя введено не полностью, а, например, так: 'MyIni.ini', то файл создастся при записи в папке Windows. Я же рекомендую создавать файл в папке с программой (её можно узнать так: ExtractFilePath(Application.ExeName)).

5. Как осуществить запись в файл? Для записи в ини-файл есть несколько процедур у класса TIniFile - смотря что надо записать.

 

Процедура записи строки:

WriteString(const Section, Ident, Value: string);

Процедура записи цифры:

WriteInteger(const Section, Ident: string; Value: Longint);

Процедура записи булевого выражения:

WriteBool(const Section, Ident: string; Value: Boolean);

Запись даты:

WriteDate(const Section, Name: string; Value: TDateTime);

Запись время:

WriteTime(const Section, Name: string; Value: TDateTime);

Запись даты и время вместе:

WriteDateTime(const Section, Name: string; Value: TDateTime);

Запись не целого численного значения:

WriteFloat(const Section, Name: string; Value: Double);

Запись потока:

WriteBinaryStream(const Section, Name: string;Value: TStream);

 

Во всех этих функциях обязательно указывать секцию (Section), имя ключа (Name) и записываемое значение.

 

Для наглядности вы можете поместить на форму кнопку и по её нажатию можете прописать следующее:

 

procedure TForm1.Button2Click(Sender: TObject);

begin

  IniFile.WriteString('Form info','Form caption',Caption);

  IniFile.WriteInteger('Form info','Left',Left);

  IniFile.WriteInteger('Form info','Top',Top);

  IniFile.WriteInteger('Form info','Width',Width);

  IniFile.WriteInteger('Form info','Height',Height);

  IniFile.WriteTime('Other','Write time',Time);

end;

 

По выполнению этого кода программа создаст (если ещё не создан) файл в указанном при процедуре Create месте и запишет в него примерно следующее:

 

[Form info]

Form caption=Form1

Left=192

Top=107

Width=544

Height=375

 

[Other]

Write time=23:13:55

 

6. Процедура чтения из ини-файла осуществляется похожим способом. Для чтения существуют функции:

 

ReadString(const Section, Ident, Default: string): string;

ReadInteger(const Section, Ident: string; Default: Longint): Longint;

ReadBool(const Section, Ident: string; Default: Boolean): Boolean;

ReadBinaryStream(const Section, Name: string; Value: TStream): Integer;

ReadDate(const Section, Name: string; Default: TDateTime): TDateTime;

ReadDateTime(const Section, Name: string; Default: TDateTime): TDateTime;

ReadFloat(const Section, Name: string; Default: Double): Double;

ReadTime(const Section, Name: string; Default: TDateTime): TDateTime;

 

Каждая функция возвращает прочтённое из файла значение. Если по каким-либо причинам прочтение не удалось, то функция возвращает значение, указанное в параметре самой функции как Default.

 

Например, для прочтения из нашего ини-файла значения Form caption надо написать следующее:

 

Edit1.Text:=IniFile.ReadString('Form info',

       'Form caption','Ошибка при чтении!');

 

В этом примере тексту помещённого на форму Edit-а присваивается прочтённое из файла значение. В нашем случае тексту Edit-а будет присвоено значение «Form1». Если чтение не удастся, то тексту Edit-а будет присвоено значение «Ошибка при чтении».

 

Другие процедуры и функции для работы с ини-файлами:

 

Проверка, существует ли секция:

function SectionExists(const Section: string): Boolean;

 

Прочтение всей секции:

procedure ReadSection(const Section: string; Strings: TStrings);

 

Прочтение всего файла (все секции записываются в Strings):

procedure ReadSections(Strings: TStrings);

 

Прочтение всех значений в заданной секции:

procedure ReadSectionValues(const Section: string; Strings: TStrings);

 

Удалить заданную секцию со всеми её значениями:

procedure EraseSection(const Section: string);

 

Удаление определённого ключа (и его значения) в секции:

procedure DeleteKey(const Section, Ident: String);

 

Проверка, существует ли заданный ключ в указанной секции:

function ValueExists(const Section, Ident: string): Boolean;

Используются технологии uCoz