Расширение имени файла | .ini |
---|---|
Тип Интернет-носителя | text / plain, application / textedit, zz-application / zz-winassoc-ini |
Тип формата | Файл инициализации / конфигурации |
Файл INI - это файл конфигурации для компьютерное программное обеспечение, которое состоит из текстового содержимого со структурой и синтаксисом, состоящими из пар ключ-значение для свойств, и разделов, которые организуют свойства. Имя этих файлов конфигурации происходит от имени файла с расширением INI для инициализации, используемого в операционной системе MS-DOS, которая сделала этот метод конфигурации программного обеспечения популяризованным. Формат стал неформальным стандартом во многих контекстах конфигурации, но многие приложения в других операционных системах используют другие расширения имен файлов, такие как conf и cfg.
Основным механизмом конфигурации программного обеспечения в Windows изначально был формат текстового файла, который содержал текстовые строки с одной парой «ключ-значение» в каждой строке, организованные в разделы. Этот формат использовался для компонентов операционной системы, таких как драйверы устройств, шрифты, средства запуска. Файлы INI также обычно использовались приложениями для хранения индивидуальных настроек.
Формат поддерживался в 16-битных платформах Microsoft Windows вплоть до Windows 3.1x. Начиная с Windows 95 Microsoft одобрила использование реестра Windows и начала уводить разработчиков от использования файлов INI для конфигурации. Все последующие версии Windows использовали реестр Windows для конфигурации системы, но приложения, созданные на.NET Framework, используют специальные файлы XML.config. Функции файла инициализации по-прежнему доступны в Windows, и разработчики по-прежнему могут их использовать. Системы
Linux и Unix также используют аналогичный формат файла для конфигурации системы. Кроме того, программное обеспечение, не зависящее от платформы, может использовать этот формат файла для конфигурации. Это удобочитаемый и простой для синтаксического анализа формат, поэтому его можно использовать для файлов конфигурации, которые не требуют гораздо большей сложности.
Файлы конфигурации Git похожи на файлы INI.
Например, платформенно-независимый PHP использует формат INI для своего "php.ini
"конфигурационный файл в системах Windows и Linux. Файлы
Desktop.ini определяют отображение каталогов в Windows, например, значки для каталога.
Базовым элементом, содержащимся в файле INI, является ключ или свойство. У каждого ключа есть имя и значение, разделенное знаком равно (=). Имя отображается слева от знака равенства. В реализации Windows знак равенства и точка с запятой являются зарезервированными символами и не могут появляться в ключе. Значение может содержать любой символ.
name = value
Ключи могут, но не обязательно, группироваться в разделы с произвольным названием. Имя раздела появляется в отдельной строке в квадратных скобках ([и]). Все ключи после объявления раздела связаны с этим разделом. Нет явного разделителя «конец раздела»; разделы заканчиваются объявлением следующего раздела или в конце файла. Разделы не могут быть вложенными.
[section] a = ab = b
Имена разделов и свойств не чувствительны к регистру в реализации Windows, но в других приложениях может вести себя по-другому.
Точка с запятой (;) в начале строки обозначает комментарий. Строки комментариев игнорируются.
; текст комментария
Формат файла INI не является универсальным строго определенным. Многие компьютерные программы поддерживают функции, выходящие за рамки уже описанных основных функций. Ниже приводится список некоторых общих функций, которые могут быть, а могут и не быть реализованы в любой данной программе.
Некоторое программное обеспечение поддерживает использование знака числа (#) в качестве альтернативы точке с запятой для обозначения комментариев. Однако он может быть включен в название ключа. Например, следующая строка создает переменную с именем «#var», но не переменную с именем «var»; иногда это используется для создания псевдо-реализации комментария.
# var = a
В общем, использование знака числа непредсказуемо, как в следующих строках (обратите внимание на пробел после знака числа во второй строке). По этой причине не следует использовать знак числа в начале комментария.
# [section] # var = a
В некоторых реализациях комментарий может начинаться в любом месте строки, в том числе в той же строке после объявлений свойств или разделов. В других случаях, включая функцию WinAPI GetPrivateProfileString, комментарии должны размещаться отдельно в строках.
Большинство реализаций поддерживают только одно свойство с заданным именем в разделе. Второе вхождение имени свойства может вызвать прерывание, оно может быть проигнорировано (и значение отброшено), или оно может переопределить первое вхождение (с отклонением первого значения). Некоторые программы используют повторяющиеся имена свойств для реализации многозначных свойств.
Интерпретация нескольких объявлений разделов с одним и тем же именем также различается. В некоторых реализациях повторяющиеся разделы просто объединяют свои свойства, как если бы они располагались непрерывно. Другие могут прервать или проигнорировать некоторые аспекты INI-файла.
Некоторые реализации также предлагают различную поддержку для escape-символа, обычно с обратной косой чертой (\
). Некоторые поддерживают «продолжение строки», где обратная косая черта, за которой сразу следует EOL (конец строки), приводит к игнорированию разрыва строки и продолжению «логической строки» на следующей фактической строке из INI-файла. Также наблюдается реализация различных «специальных символов» с escape-последовательностями.
Последовательность | Значение |
---|---|
\\ | \ (одиночная обратная косая черта, экранирующая escape-символ) |
\' | Апостроф |
\" | Двойные кавычки |
\0 | Нулевой символ |
\a | Bell / Alert / Audible |
\b | Backspace, Bell character для некоторых приложений |
\t | Tab знак |
\r | Возврат каретки |
\n | Перевод строки |
\; | Точка с запятой |
\# | Знак числа |
\= | Знак равенства |
\: | Двоеточие |
\ x ???? | Символ Юникода с шестнадцатеричным кодовой точкой, соответствующей ???? |
Также могут быть разрешены необязательные «глобальные» свойства, которые объявляются перед объявлением любого раздела.
Чаще всего файлы INI не имеют иерархия разделов внутри разделов. Однако некоторые файлы имеют иерархическое соглашение об именах. Для раздела A, подраздела B, подраздела C, свойства P и значения V они могут принимать такие записи, как [ABC]
и P = V
(Windows 'xstart.ini
), [A \ B \ C]
и P = V
(файл драйвера IBM Windows devlist.ini
) или [A]
и B, C, P = V
(файл Microsoft Visual Studio AEMANAGR.INI
).
Неясно, являются ли это просто соглашения об именах, которые приложение использует для создания видимости иерархии, или же файл читается модулем, который фактически представляет эту иерархию программисту приложения..
Некоторые реализации допускают использование двоеточия (:
) в качестве разделителя имени / значения (вместо знака равенства).
Некоторые реализации позволяют заключать значения в кавычки, обычно с использованием двойных кавычек и / или апострофов. Это позволяет явно указывать пробелы и / или заключать в кавычки специальные символы (равно, точка с запятой и т. Д.). Стандартная функция Windows GetPrivateProfileString поддерживает это и удаляет кавычки, окружающие значения.
Интерпретация пробела варьируется. Большинство реализаций игнорируют начальные и конечные пробелы вокруг имени свойства. Некоторые даже игнорируют пробелы в значениях (например, делая эквивалентными «имя хоста» и «имя хоста»). Некоторые реализации также игнорируют начальные и конечные пробелы вокруг значения свойства; другие считают, что все символы , следующие за знаком равенства (включая пробелы), являются частью значения.
В большинстве случаев порядок свойств в разделе и порядок разделов в файле не имеют значения, но реализации могут отличаться.
В следующем примере файла есть два раздела: один для владельца программного обеспечения, а второй - для подключения к базе данных заработной платы. В комментариях указывается последнее лицо, изменившее файл, и причина изменения.
; последнее изменение: 1 апреля 2001 г., Джон Доу [владелец] имя = Джон Доу организация = Acme Widgets Inc. [база данных]; использовать IP-адрес в случае, если разрешение сетевого имени не работает server = 192.0.2.62 port = 143 file = "payroll.dat"
В Windows Profile API является программным интерфейс, используемый для чтения и записи настроек из классических файлов Windows.ini. Например, функция GetPrivateProfileString извлекает строку из указанного раздела в файле инициализации.
В следующем примере программы C демонстрируется чтение значений свойств из приведенного выше примера INI-файла (пусть имя файла конфигурации будет dbsettings.ini
):
# включитьint main (int argc, _TCHAR * argv) {_TCHAR dbserver [1000]; int dbport; GetPrivateProfileString («база данных», «сервер», «127.0.0.1», dbserver, sizeof (dbserver) / sizeof (dbserver [0]), «. \\ dbsettings.ini»); dbport = GetPrivateProfileInt («база данных», «порт», 143, «. \\ dbsettings.ini»); // N.B. WritePrivateProfileInt () не существует return 0; }
Третий параметр функции GetPrivateProfileString - это значение по умолчанию, которое равно «127.0.0.1» и 143 соответственно в двух вызовах функций выше. Если аргумент, предоставленный для этого параметра, - ПУСТО (NULL), по умолчанию используется пустая строка "".
В Unix существует множество различных библиотек конфигурации для доступа к файлам INI. Часто они уже включены в структуры и наборы инструментов. Примеры синтаксических анализаторов INI для Unix включают GLib, iniparser и libconfini.
Имя | Поддержка разделов | Поддержка вложения разделов | Распознавание отключенных записей | Поддержка нескольких строк | Типы значений | Поддержка чтения / записи | Платформа | Лицензия | Язык программирования | Последняя версия выпуска |
---|---|---|---|---|---|---|---|---|---|---|
Да | Нет | Нет | Нестандартный | Логический, Число, Строка | Чтение + Запись | * BSD, GNU / Linux, macOS, Windows | PSFL | C (реализация), Python (использование) | 3.8.2 | |
GLib | Да | Да | Нет | Нет | Логическое, Число, Строка, Массив | Чтение + Запись | * BSD, GNU / Linux, macOS, Windows | LGPL | C | 2.64.4 (2 июля 2020 г.; 3 месяца назад (2020-07-02)) |
Да | Нет | Нет | Нет | Логическое, Число, Строка | Чтение + запись | * BSD, GNU / Linux, macOS, Windows | Apache | Go | 1.2.0 | |
Да | Нет | Нет | Да | Логическое, Число, Строка | Чтение | * BSD, GNU / Linux, macOS, Windows | BSD | C | 48 | |
Да | Нет | Нет | Да | логическое, число, строка | чтение + запись | * BSD, GNU / Linux, macOS, Windows | MIT | C | 4.1 | |
Java (через java.util.Properties ) | Нет | Нет | Нет | Да | Строка | Чтение + запись | Независимость от платформы | Двойная лицензия: версия GPL 2 с исключением пути к классам и проприетарной лицензией . | C (реализация), Java (использование) | 15.0.1 (20 октября 2020 г.; 4 дня назад (2020-10-20)). 11.0.9 (11 сентября 2020 г.; 43 дня назад (2020-09-11)). 8u272 (28 сентября 2020 г.; 26 дней назад (2020-09-28)) |
Да | Да | Да | Да | Логическое, Число, Строка, Массив | Чтение | * BSD, GNU / Linux, macOS, Windows | GPL | C | 1.14.0 | |
PyINI | Да | Нет | Да | Да | Логическое, Число, Строка | Чтение + запись | Независимость от платформы | GPL | Python | 1.0 |
Да | Нет | Нет | Нет | Логическое, Число, Строка | Чтение + Запись | GNU / Linux, Windows | GPL | C ++ | Снято с производства - последняя версия 5.0.5, с ноября 2009 г. | |
Windows API | Да | Нет | Нет | Нет | Число, Строка, Структура | Чтение + запись (неразрушающий) | Windows | Собственный | C | 1803 (10.0.17134.112) (июнь 12, 2018; 2 года назад (2018-06-12)) |
Wine (imp использование Windows API ) | Да | Нет | Нет | Нет | Число, Строка, Struct | чтение + запись (неразрушающий) | Linux, macOS, Windows | LGPL | C | 5.0.2 (7 августа 2020 г.; 2 месяца назад (2020-08-07)) |
Имя | Поддержка разделов | Поддержка вложенности разделов | Распознавание отключенных записей | Многострочный поддержка | Типы значений | Поддержка чтения / записи | Платформа | Лицензия | Язык программирования | Последняя версия выпуска |
Инициализация сопоставление файлов создает сопоставление между файлом INI и реестром . Он был представлен в Windows NT и Windows 95 как способ перехода от хранения настроек в классических файлах.ini к новому реестру Windows. Сопоставление файлов перехватывает вызовы Profile API и, используя настройки из раздела реестра IniFileMapping
, направляет чтение и запись в соответствующие места в реестре.
Используя приведенный выше пример, можно выполнить строковый вызов, чтобы получить ключ имени из раздела владельца из файла настроек, например, dbsettings.ini. Возвращаемое значение должно быть строкой «Джон Доу»:
GetPrivateProfileString («владелец», «имя»,..., «c: \\ programs \\ oldprogram \\ dbsettings.ini»);
Отображение INI принимает этот вызов API профиля, игнорирует любой путь в данном имени файла и проверяет, есть ли ключ реестра, соответствующий имени файла в каталоге:
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \. CurrentVersion \ IniFileMapping
Если он существует, он ищет имя записи, совпадающее с запрошенным разделом. Если запись найдена, отображение INI использует ее значение как указатель на другую часть реестра. Затем он ищет запрошенную настройку INI в этой части реестра.
Если совпадающее имя записи не найдено и есть запись под именем записи (по умолчанию)
, вместо нее используется сопоставление INI. Таким образом, каждое имя раздела не требует отдельной записи.
HKEY_LOCAL_MACHINE \ Software \... \ IniFileMapping \ dbsettings.ini | |
---|---|
(по умолчанию) | @USR: Software \ oldprogs \ inisettings \ all |
база данных | USR: Software \ oldprogs \ inisettings \ db |
Итак, в этом случае вызов профиля для раздела [владелец] отображается на:
HKEY_CURRENT_USER \ Software \ oldprogs \ inisettings \ all | |
---|---|
name | John Doe |
organization | Acme Products |
, где найдено имя записи реестра «name
», совпадающее с запрошенным ключом INI. Затем значение «John Doe» возвращается вызову Profile. В этом случае префикс @ по умолчанию препятствует чтению файла dbsettings.ini на диске. В результате любые настройки, не найденные в реестре, не ищутся в INI-файле.
Запись реестра «база данных
» не имеет префикса @ в значении; таким образом, только для раздела [database] сначала берутся настройки в реестре, а затем настройки в файле dbsettings.ini на диске.
Начиная с Windows 95, Microsoft начала активно продвигать использование реестра Windows вместо INI-файла. Файлы INI обычно ограничены двумя уровнями (разделы и свойства) и плохо обрабатывают двоичные данные. Однако это решение не было защищено от критики из-за того, что реестр является монолитным, непрозрачным и двоичным, должен быть синхронизирован с файловой системой и представляет собой единую точку отказа для операционной системы.
Позже файлы конфигурации на основе XML стали популярным выбором для кодирования конфигурации в текстовых файлах. XML допускает произвольно сложные уровни и вложения и имеет стандартные механизмы для кодирования двоичных данных.
В последнее время форматы сериализации данных, такие как JSON, TOML и YAML могут служить форматами конфигурации. Эти три альтернативных формата могут размещаться произвольно, но имеют другой синтаксис, чем файл INI. Среди них TOML больше всего напоминает INI, но идея сделать TOML сознательно совместимым с большим подмножеством INI была отклонена.
Однако новейшие синтаксические анализаторы INI допускают такой же произвольный уровень вложенности XML, JSON, TOML и YAML предлагают эквивалентную поддержку типизированных значений и Unicode, хотя сохранить «неформальный статус» файлов INI, разрешив несколько синтаксисов для выражения одного и того же.