Хранить настройки в ini файле

Обновлено: 07.07.2024

Формат файла "INI" является неофициальным стандартом для файлов конфигурации для некоторых платформ или программного обеспечения. Файлы INI представляют собой простые текстовые файлы с базовой структурой, состоящей из разделов, свойств и значений [Источник 1] .

В MS-DOS и 16-разрядных Windows-платформах под Windows ME файл INI служил основным механизмом для настройки операционной системы и установленных функций приложений, таких как драйверы устройств, шрифты, конфигурации запуска и параметры, которые было необходимо инициализировать в Загрузки Windows. Файлы INI также обычно используются приложениями для хранения своих индивидуальных настроек. [Источник 2]

Имя "INI-файл" происходит от обычно используемого расширения имени файла .INI , что означает "инициализация". Другими распространенными расширениями файлов инициализации являются .CFG , .conf ,и .TXT , особенно «config.txt».

Системы Linux и Unix также используют одинаковый формат файлов для настройки системы. Кроме того, программное обеспечение, ориентированное на платформу, может использовать этот формат для конфигурации. Он удобочитаемый и простой для разбора, поэтому он является удобным форматом для файлов конфигурации, которые не требуют значительно большей сложности.

Содержание

Формат

Ключи (свойства)

Основной элемент, содержащийся в ini файл - "ключ" или "значение". Каждый ключ имеет имя и значение, разделенные на знак равенства ( = ). Имя отображается слева от знака равенства.

Sections

Ключи могут (но не обязательно) быть сгруппированы в произвольно названные "разделы". Название раздела отображается на отдельной строке в квадратных скобках ( [ и ] ). Все ключи после объявления раздела связаны с этим разделом. Нет явного "конца раздела"; разделы заканчиваются в следующей декларации раздела или в конце файла. Разделы не могут быть вложенными.

Нечувствительность к регистру

Имена разделов и свойств не зависят от регистра в Windows [Источник 3] .

Комментарии

Точка с запятой ( ; ) в начале строки означают комментарий. Строки комментариев игнорируются.

Различные особенности

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

Пустые строки

Некоторые устаревшие программы не позволяют иметь пустые строки. Поэтому каждая строка должна быть заголовком раздела, свойством или комментарием.

Комментарии

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

Повторяющиеся имена

Большинство реализаций поддерживают только одно свойство с заданным именем в разделе. Второе вхождение имени свойства может вызвать прерывание, оно может быть проигнорировано (и значение сброшено), или оно может переопределить первый вариант (с отброшенным первым значением). Некоторые программы используют повторяющиеся имена свойств для реализации многозначных свойств.

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

Глобальные свойства

Необязательные "глобальные" свойства также могут быть разрешены, которые объявляются перед объявлением любого раздела [Источник 4] .

Иерархия

Чаще всего, ini-файлы не имеют иерархии разделов в разделах.

Наименование/значение разделителя

Некоторые реализации допускают использование двоеточия ( : ) в качестве разделителя имени / значения (вместо знака равенства).

Цитированные значения

Некоторые реализации позволяют указывать значения, используя двойные кавычки и/или апострофы. Это позволяет явно объявлять пробелы и / или цитирование специальных символов (равно, точка с запятой и т.д.). Стандартная функция Windows GetPrivateProfileString поддерживает это и удаляет кавычки, которые окружают значения.

Пробелы

Порядок разделов и свойств

В большинстве случаев порядок свойств в разделе и порядок секций в файле значения не имеет, но реализации могут отличаться.

Пример

Ниже приведен пример файла INI для мнимой программы. Он состоит из двух разделов: один для владельца программного обеспечения и один для подключения базы данных расчета заработной платы. Заметьте, что кто модифицировал последний файл и почему вместо IP-адреса используется DNS имя.

Доступ к INI файлам

В Windows, "API профиль" - это программный интерфейс, используемый для чтения и записи параметров из классических файлов .ini в Windows. Например, функция GetPrivateProfileString извлекает строку из указанного раздела в файле инициализации.

Следующий пример программы на языке C демонстрирует чтение значений свойств из вышеупомянутого образца файла INI (пусть имя файла конфигурации будет dbsettings.ini ).

В Unix существует множество различных конфигурационных библиотек для доступа к файлам INI. Они часто уже включены в рамки и инструментальные средства. Примеры парсеров INI для UNIX включают iniparserи libconfiniи Elektra Initiative.

Отображение файла в память

Отображение файла в память. [Источник 5] создает сопоставление между файлом INI и реестром. Оно было представлено в Windows NT и Windows 95 в качестве способа перехода от сохранения настроек в классических .ini-файлах к новому реестру Windows. Ловушка отображения файла в памяти Профиля API и, используя параметры из раздела реестра IniFileMapping , направляет чтение и запись в соответствующие места в реестре.

Используя вышеприведенный пример, можно было бы сделать строковый вызов для извлечения ключа name из раздела owner" из файла настроек, называемого, скажем, dbsettings.ini . Возвращаемое значение должно быть строкой «John Doe»:

INI сопоставление принимает этот вызов API профиля, игнорирует любой путь в указанном имени файла и проверяет, есть ли ключ реестра, соответствующий имени файла в:

Если он существует, он ищет имя записи, соответствующее запрашиваемому разделу. Если запись найдена, INI сопоставление использует ее значение как указатель на другую часть реестра. Затем он ищет запрошенный параметр INI в той части реестра.

Если подходящее имя записи не найдено и есть запись под названием (Default) , INI сопоставление использует последнее. Таким образом, каждое имя секции не нуждается в отдельной записи.

HKEY_LOCAL_MACHINE\Software\. \IniFileMapping\dbsettings.ini
(Default) @USR:Software\oldprogs\inisettings\all
database USR:Software\oldprogs\inisettings\db

Таким образом, в этом случае вызов профиля для раздела [owner] отображается на:

HKEY_CURRENT_USER\Software\oldprogs\inisettings\all
name John Doe
organization Acme Products

где найденное имя записи " name " в соответствует запрошенному ключу INI. Значение «John Doe» затем возвращается к вызову Profile. В этом случае префикс @ по умолчанию запрещает какие-либо чтения обращаться к файлу dbsettings.ini на диске. Результатом является то, что любые настройки, не найденные в реестре, не просматриваются в файле INI.

Запись " database " в реестре не имеет префикса @ для значения; Таким образом, для раздела [database] only сначала выполняются параметры в реестре, а затем параметры в файле dbsettings.ini на диске.

Альтернативы

Начиная с Windows 95, Microsoft начала активно продвигать использование реестра Windows в файле INI. . [Источник 6] Файлы INI обычно ограничены двумя уровнями (разделами и свойствами) и не обрабатывают двоичные данные хорошо

Позднее конфигурационные файлы на основе XML стали популярным выбором для настройки кодировки в текстовых файлах. XML допускает произвольные сложные уровни и вложенность и имеет стандартные механизмы для кодирования двоичных данных.

Совсем недавно, форматы данных сериализации, таких как JSON, TOML и YAML могут служить в качестве формата конфигурации. Эти три альтернативных формата могут встраиваться произвольно, но имеют более мощный синтаксис, чем INI-файл.

Большинство программистов сталкиваются с проблемой сохранения настроек своей программы, но сегодня мы решим эту проблему. Мы научимся работать с ini файлами. Еще одним способом сохранять настройки является реестр, но его лучше не изменять, да и работать с ним немного сложнее.

Итак, ini-файл имеет простую и понятную структуру :

[Секция1]
Идентификатор1 = Значение1
Идентификатор2 = Значение2
[Секция2]
Идентификатор1 = Значение1 Для использования ini-файлов, в C++Builder предусмотрен модуль IniFiles , его мы и подключаем:

Далее, нужно создать обьект класса TIniFile, назовем его Ini.

значения сохраняет на диске С: в файл options.ini .

После этого, на форму кинем две кнопки (TButton) и два Эдита (TEdit). Мы будем сохранять текст Эдитов в ini-файл, а потом загружать его.
Пишем обработчик события нажатия кнопки Button1. Она будет сохранять текст Эдитов в наш options.ini

Так, как мы работаем с текстом, мы использовали метод класса WriteString,
если нам нужно было бы работать с числами, мы бы написали WriteInteger .

Где параметры для этой функции:
"Edits" - имя секции;
"Edit1" - указатель на объект;
"Edit1->Text" - строка, которую мы сохраняем (текст эдита).

Далее, рассмотрим пример загрузки параметров с ini , пишем обработчик события для второй кнопки:

Здесь используем функцию чтения :ReadString , где:

"Edits" - секция из которая нам надо ;
"Edit1" - объект для которого загружаем строку;
"Def" - эта строка заполняет Эдит, если значение ini не найдено;

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

Методы и свойства реализуемые TIniFile
Использовать или установить это . Чтобы сделать это . Наследование

Важно
Методы ТIniFile будут пытаться найти INI-файл в каталоге Windows. Если вы хотите читать или писать INI-файл, расположенный не в каталоге Windows, следует явно добавить путь к имени INI-файла при его открытии в Create.

Автозагрузка конфигурации

Создаем 2 кнопки, раздела меню, т.д которые будут отвечать за запись файла, чтение файла конфигурации.

В интернете приведено очень много способов хранения настроек программы, но все они как-то разбросаны, поэтому я решил их собрать вместе и расписать, как этим пользоваться.

На хабре уже была посвящена этому тема, поэтому… перейти

Информация о Properties.Settings

Организация Properties.Settings — это обычный xml файл, который можно найти в папке пользователя:

С:\ Users \ [user name] \ AppData \ Local \ [ (Project Name) or (AssemblyCompany) ] \ [name project_cashBuild] \ [AssemblyVersion] \ user.config

Для начала нам нужно создать такие переменные для Properties.Settings. Перейдем в Properties -> Settings.settings:



Я создал 3-и переменные и выбрал область их использования: 2- область пользователь и 1- приложение.

Различие между областями просты. Область приложения можно только читать, а пользователь — изменять и читать.

Вернемся к переменным:

  • Version — версия нашей программы. Определил ее строкой и областью приложение. Т.к. версия может содержать буквы (например, b — от beta). А область выбрал, чтоб не менялась наша версия приложения (т.к. AssemblyVersion редко кто использует).
  • Save_text — это переменная, куда мы будем сохранять наш текст.
  • open_sum — сколько раз мы открыли программу.

Результаты работы программы

Первый запуск, мы видим, что кол-во запусков равно 1. И теста в richTextBox1 нет.


Теперь напишем и сохраним текст.


При втором запуске мы видим, что текст сохранен, и кол-во запусков уже 2-ва.


Очень удобно использовать этот объект, если надо работать в разных областях видимости в одном проекте. Метод хорош, когда вам не надо, чтоб рядовой пользователь рылся в файлах настройки программы.

С ini-файлами все на оборот, они лежат в папке рядом с программой, что позволяет пользователю изменить настройки вне-программы. Данный способ хорош, если настройки программы заносятся вручную. Например, эмулятор для запуска игры без лицензии (тотже revLoader).

Теперь перейдем к нашей теме. Для работы с таким типом файлов, нам нужно создать класс по работе с ним. Создаем класс, например «IniFile», подключаем пространство имен, которых нет:


А теперь разбираем по-порядку:

Теперь переходим в основную программу.

Результаты работы программы

При первом запуска, у нас нет файла config.ini. Поэтому при проверке возвращаются fasle и мы приравниваем окно к минимальным параметрам.


Меняем параметры окна и жмем «Применить»


Редактируем файл config.ini руками и жмем загрузить.


На этом все, в следующий раз опишу работу с xml файлами и с бинарными файлами.

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

Что такое INI-файлы

Что такое INI-файлы

Что такое INI-файлы

Неопытные пользователи нередко принимают их за вирусы и удаляют, чего делать, конечно же не следует. Так что же такое INI-файлы и для чего они нужны в Windows? На этом вопрос мы постараемся ответить в этом небольшом посте.

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

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

Тем временем Windows совершенствовалась, ее структура становилась все более сложной, и вскоре стало очевидным, что хранить системные и программные настройки в ini-файлах не только неудобно, но и непрактично. Ведь INI-файлы имеют массу недостатков.

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

Переход не был резким, часть данных по-прежнему хранилась в конфигурационных файлах, да и реестр был еще тогда довольно примитивным. Но выбор был сделан окончательно и бесповоротно, и уже в XP практически все важные настройки "переехали" в реестр.

Сегодня INI-файлы служат в основном для хранения различных второстепенных параметров, например настроек внешнего вида папок, рабочего стола и т.д. Также INI-файлы активно используются различным программным обеспечением, Unix-системами и IDE.

На практике простым пользователям чаще всего приходится сталкиваться с одним типом INI-файлов, а именно desktop.ini. Используется этот файл для настройки внешнего вида папок. Его содержимое обычно представлено отдельными блоками или секциями, каждая из которых включает набор параметров, организованных по типу ключ-значение.

Например, параметр IconFile отвечает за стандартный значок каталога, Owner запрещает или открывает к нему доступ, а InfoTip позволяет добавлять к папкам всплывающие текстовые комментарии по типу файлов и ярлыков.

Другие типы конфигурационных файлов, таких как сontrol.ini, oeminfo.ini и boot.ini сегодня считаются устаревшими и практически не используются.

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

На этом я пожалуй и закончу свой рассказ всем пока и до новых познавательных встреч с вами дорогие мои друзья.

Читайте также: