Как редактировать файлы INI в Delphi

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

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

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

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

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

Вот пример:

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

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

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

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

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

Класс TIniFile

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

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

 
   использует  inifiles; 
...
var
IniFile: TIniFile;
begin
IniFile: = TIniFile.Create ('myapp.ini');

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

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

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


iniFile: = TIniFile.Create (ChangeFileExt (Application.ExeName,'. ini '));

Чтение из INI

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

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

 
   function  ReadString ( const  Раздел, Идентификатор, По умолчанию: Строка): Строка;  

Запись в INI

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

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

 
  project1  .ini  
[Пользователь]
Last = Zarko Gajic
Date = 29.01.2009
[Размещение]
Вверху = 20
Left = 35
Ширина = 500
Высота = 340

Обратите внимание, что ключ с именем Last содержит строковое значение, Date содержит значение TDateTime, а все ключи в разделе Placement содержат целочисленное значение.

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

 
  процедура  TMainForm.FormCreate (Sender:  TObject); 
var
appINI: TIniFile;
LastUser: string;
LastDate: TDateTime;
begin
appINI: = TIniFile.Create (ChangeFileExt (Application.ExeName, '. ini'));
попробуйте
//если последний пользователь не возвращает пустую строку
LastUser: = appINI.ReadString ('User', 'Last', '');
//если нет последней даты, вернуться к сегодняшней дате
LastDate: = appINI. ReadDate ('User', 'Date', Date);

//показать сообщение
ShowMessage ('Эта программа ранее использовалась by '+ LastUser +' on '+ DateToStr (LastDate));

Вверху: = appINI.ReadInteger (' Placement ',' Top ', Top);
Left: = appINI.ReadInteger ('Размещение', 'Слева', Слева);
Ширина: = appINI.ReadInteger ('Размещение', 'Ширина', Ширина);
Высота: = appINI.ReadInteger ('Размещение', 'Высота', Высота);
наконец
appINI.Free;
end ;
end ;

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

 
  процедура  TMainForm.FormClose (Sender: TObject;  var  Action: TCloseAction); 
var
appINI: TIniFile;
begin
appINI: = TIniFile.Create (ChangeFileExt (Application.ExeName, '. ini '));
попробуйте
appINI.WriteString (' User ',' Last ',' Zarko Gajic ');
appINI. WriteDate ('User', 'Date', Date);

с appINI, MainForm do
begin
WriteInteger ('Placement', 'Top', Top);
WriteInteger ('Placement', 'Left', Left);
WriteInteger ('Размещение', 'Ширина', Ширина);
WriteInteger ('Размещение', 'Высота', Высота);
end ;
finally
appIni.Free;
end ;
end ;

Разделы INI

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

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

Класс TIniFile использует Windows API, который налагает ограничение на файлы INI в 64 КБ. Если вам нужно хранить более 64 КБ данных, вы должны использовать TMemIniFile.

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

Оцените статью
recture.ru
Добавить комментарий