Как манипулировать INI-файлами из Delphi

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

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

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

Формат файла INI

Файл настроек инициализации или конфигурации (.INI) представляет собой текстовый файл с ограничением в 64 КБ, разделенный на разделы, каждый из которых содержит ноль или более ключей. Каждый ключ содержит ноль или более значений.

Вот пример:

 [Имя раздела]
имя_раздела_1 = значение
;комментарий
keyname2 = значение

instagram viewer

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

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

Ключ может содержать строкацелое число или логическийзначение.​

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

TIniFile Класс

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

Прежде чем работать с методами TIniFile, необходимо создать экземпляр класса:

использования IniFiles;
...
вар
IniFile: TIniFile;
начать
IniFile: = TIniFile. Создать ( 'myapp.ini');

Приведенный выше код создает объект IniFile и присваивает myapp.ini единственному свойству класса - Свойство FileName - используется для указания имени файла INI, который вы будете использовать.

Код, как написано выше, ищет myapp.ini файл в \ Windows каталог. Лучший способ хранить данные приложения в папке приложения - просто укажите полный путь к файлу для Создайте метод:

// помещаем INI в папку приложения,
// пусть у него есть имя приложения
// и 'ini' для расширения:

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

Чтение из INI

Класс TIniFile имеет несколько методов чтения. ReadString читает строковое значение с ключа, ReadInteger. ReadFloat и аналогичные используются для чтения числа с ключа. Все методы «чтения» имеют значение по умолчанию, которое можно использовать, если запись не существует.

Например, ReadString объявлен как:

функция ReadString (Const Раздел, Идентификатор, По умолчанию: String): String; переопределение;

Написать в INI

TIniFile имеет соответствующий метод записи для каждого метода чтения. Это WriteString, WriteBool, WriteInteger и т. Д.

Например, если мы хотим, чтобы программа запоминала имя последнего человека, который ее использовал, когда это было, и каковы были основные координаты формы, мы могли бы создать раздел под названием пользователейключевое слово Последний, Дата отслеживать информацию, и раздел под названием размещение с ключами верхний, Осталось, ширина, и Высота.

project1.ini
[Пользователь]
Последний = Зарко Гаджич
Date = 01/29/2009
[Размещение]
Top = 20
Left = 35
Ширина = 500
Высота = 340

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

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

процедура TMainForm. FormCreate (Отправитель: TObject);
вар
appINI: TIniFile;
LastUser: строка;
LastDate: TDateTime;
начать
appINI: = TIniFile. Создать (ChangeFileExt (Приложение. ExeName, '. Ini'));
пытаться
// если последний пользователь не вернул пустую строку
LastUser: = appINI.ReadString ('User', 'Last', '');
// если нет последней даты, возвращаем сегодняшнюю дату
LastDate: = appINI.ReadDate ('Пользователь', 'Дата', Дата);
// показать сообщение
ShowMessage ('Эта программа ранее использовалась' + LastUser + 'для' + DateToStr (LastDate));
Top: = appINI.ReadInteger («Размещение», «Вверх», «Вверх»);
Слева: = appINI.ReadInteger («Размещение», «Слева», слева);
Ширина: = appINI.ReadInteger («Размещение», «Ширина», «Ширина»);
Высота: = appINI.ReadInteger («Размещение», «Высота», Высота);
наконец
appINI.Free;
конец;
конец;

Событие OnClose главной формы идеально подходит для Сохранить INI часть проекта.

процедура TMainForm. FormClose (Отправитель: TObject; вар Действие: TCloseAction);
вар
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 использует Windows API что накладывает ограничение в 64 КБ для файлов INI. Если вам нужно хранить более 64 КБ данных, вы должны использовать TMemIniFile.

Другая проблема может возникнуть, если у вас есть раздел с более чем 8 K значение. Один из способов решения этой проблемы - написать собственную версию метода ReadSection.

instagram story viewer