INI-файл

редактировать
Инициализация
INI-файл icon.png
Расширение имени файла .ini
Тип Интернет-носителя text / plain, application / textedit, zz-application / zz-winassoc-ini
Тип форматаФайл инициализации / конфигурации

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

Содержание
  • 1 История
  • 2 Формат
    • 2.1 Ключи (свойства)
    • 2.2 Разделы
    • 2.3 Чувствительность к регистру
    • 2.4 Комментарии
    • 2.5 Различные функции
      • 2.5.1 Комментарии
      • 2.5.2 Повторяющиеся имена
      • 2.5.3 Escape-символы
      • 2.5.4 Глобальные свойства
      • 2.5.5 Иерархия
      • 2.5.6 Разделитель имени / значения
      • 2.5.7 Значения в кавычках
      • 2.5.8 Пробел
    • 2.6 Порядок разделов и свойств
  • 3 Пример
  • 4 Доступ к файлам INI
    • 4.1 Сравнение анализаторов INI
  • 5 Отображение файлов
  • 6 Альтернативы
  • 7 См. Также
  • 8 Ссылки
  • 9 Внешние ссылки
История

Основным механизмом конфигурации программного обеспечения в 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-символы

Некоторые реализации также предлагают различную поддержку для escape-символа, обычно с обратной косой чертой (\). Некоторые поддерживают «продолжение строки», где обратная косая черта, за которой сразу следует EOL (конец строки), приводит к игнорированию разрыва строки и продолжению «логической строки» на следующей фактической строке из INI-файла. Также наблюдается реализация различных «специальных символов» с escape-последовательностями.

Обычные escape-последовательности
ПоследовательностьЗначение
\\\ (одиночная обратная косая черта, экранирующая escape-символ)
\'Апостроф
\"Двойные кавычки
\0Нулевой символ
\aBell / Alert / Audible
\bBackspace, Bell character для некоторых приложений
\tTab знак
\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"
Доступ к файлам INI

В 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.

Сравнение анализаторов INI

ИмяПоддержка разделовПоддержка вложения разделовРаспознавание отключенных записейПоддержка нескольких строкТипы значенийПоддержка чтения / записиПлатформа Лицензия Язык программирования Последняя версия выпуска
ДаНетНетНестандартныйЛогический, Число, Строка Чтение + Запись* 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
nameJohn Doe
organizationAcme 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, разрешив несколько синтаксисов для выражения одного и того же.

См. также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-23 07:28:33
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте