Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

История [ править ]

Основным механизмом настройки программного обеспечения в Windows изначально был формат текстового файла, который состоял из текстовых строк с одной парой ключ-значение в каждой строке, организованных в разделы. Этот формат использовался для компонентов операционной системы, таких как драйверы устройств, шрифты, средства запуска. Файлы INI также обычно использовались приложениями для хранения индивидуальных настроек. [3]

Формат поддерживался в 16-битных платформах Microsoft Windows вплоть до Windows 3.1x . Начиная с Windows 95 Microsoft одобрила использование реестра Windows и начала отговаривать разработчиков от использования INI-файлов для настройки. Во всех последующих версиях Windows для настройки системы использовался реестр Windows, но приложения, построенные на .NET Framework, используют специальные файлы XML .config . Функции файла инициализации по-прежнему доступны в Windows, и разработчики по-прежнему могут их использовать.

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

Файлы конфигурации Git похожи на файлы INI. [4]

PHP использует формат INI для своего " php.ini" файла конфигурации как в Windows, так и в Linux. [5] [6]

Файлы Desktop.ini определяют отображение каталогов в Windows, например, значки для каталога. [7]

Форматировать [ редактировать ]

Ключи (свойства) [ править ]

Базовым элементом INI-файла является ключ или свойство . Каждый ключ имеет имя и значение, разделители с помощью знака равенства (=). Имя отображается слева от знака равенства. В реализации Windows знак равенства и точка с запятой являются зарезервированными символами и не могут появляться в ключе. Значение может содержать любой символ.

имя = значение

Разделы [ править ]

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

[раздел] a = a b = b

Чувствительность к регистру [ править ]

Имена разделов и свойств не чувствительны к регистру в реализации Windows [8], но другие приложения могут вести себя иначе.

Комментарии [ редактировать ]

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

; текст комментария

Различные функции [ править ]

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

Комментарии [ редактировать ]

Некоторое программное обеспечение поддерживает использование знака числа (#) в качестве альтернативы точке с запятой для обозначения комментариев. Однако он может быть включен в название ключа. Например, следующая строка создает переменную с именем «#var», но не переменную с именем «var»; иногда это используется для создания псевдо-реализации комментария.

# var = a

В более общем плане использование знака числа непредсказуемо, как в следующих строках (обратите внимание на пробел после знака числа во второй строке). По этой причине не следует использовать знак числа в начале комментария.

# [раздел] # var = a

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

Повторяющиеся имена [ править ]

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

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

Экранированные символы [ править ]

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

Глобальные свойства [ править ]

Также могут быть разрешены необязательные «глобальные» свойства, которые объявляются до объявления любого раздела. [9]

Иерархия [ править ]

Чаще всего в файлах INI отсутствует иерархия разделов внутри разделов. Однако некоторые файлы имеют иерархическое соглашение об именах. Для раздела A, подраздела B, подраздела C, свойства P и значения V они могут принимать такие записи, как [A.B.C]and P=V(Windows ' xstart.ini) [A\B\C]и P=V(файл драйвера IBM Windows devlist.ini) или [A]and 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):

#include  <windows.h>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» );  // NB WritePrivateProfileInt () не существует  return  0 ; }

Третий параметр функции GetPrivateProfileString - это значение по умолчанию, которое равно «127.0.0.1» и 143 соответственно в двух приведенных выше вызовах функций. Если аргумент, предоставленный для этого параметра, - ПУСТО (NULL), по умолчанию используется пустая строка "".

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

Сравнение парсеров INI [ править ]

Сопоставление файлов [ править ]

Сопоставление файла инициализации создает сопоставление между файлом INI и реестром . [39] [40] Он был представлен в 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 в этой части реестра.

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

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

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

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

Альтернативы [ править ]

Начиная с Windows 95 , Microsoft начала активно продвигать использование реестра Windows вместо INI-файла. [41] Файлы INI обычно ограничены двумя уровнями (разделы и свойства) и плохо обрабатывают двоичные данные. Однако это решение не было защищено от критики из-за того, что реестр является монолитным, непрозрачным и двоичным, должен быть синхронизирован с файловой системой и представляет собой единую точку отказа для операционной системы. [42]

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

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

Однако новейшие синтаксические анализаторы INI допускают один и тот же произвольный уровень вложения XML , JSON , TOML и YAML , предлагают эквивалентную поддержку типизированных значений и Unicode , хотя сохраняют «неформальный статус» файлов INI, позволяя использовать несколько синтаксисов для выражения одного и того же. . [44]

См. Также [ править ]

  • BOOT.INI
  • MSConfig
  • Sysedit
  • SYSTEM.INI
  • TOML , очень похожий, но более формально определенный формат файла конфигурации
  • WIN.INI
  • Amiga «S IFF файлы
  • .DS Магазин
  • .характеристики

Ссылки [ править ]

  1. ^ Microsoft TechNet: Настройка элемента файла Ini
  2. ^ .conf файлы инициализации
  3. ^ Microsoft: Пакет ресурсов для рабочих станций Windows NT
  4. ^ git-config КОНФИГУРАЦИОННЫЙ ФАЙЛ [1]
  5. ^ Расмус Лердорф, Кевин Татро, Питер Макинтайр. «Программирование PHP» . Разделы «parse_ini_file», «Расширения INI Entries» и т. Д.
  6. ^ Кристиан Венц. «Разговорник PHP и MySQL» . раздел «Парсинг INI файлов». цитата: "... формат файла INI ... очень широко использовался в мире Windows, но сегодня он также управляет конфигурацией программных продуктов, таких как PHP. Например, ...php.ini"
  7. ^ Кодрут Неагу, "Почему на моем рабочем столе два файла Desktop.ini и что они делают?" .
  8. ^ "Функция GetPrivateProfileString" . Сеть разработчиков Microsoft . Microsoft . Проверено 2 июня 2012 .
  9. ^ Документация Apache для org.apache.commons.configuration2.INIConfiguration , The Apache Software Foundation
  10. ^ Среди авторов файлов INI является обычной практикой «закомментировать» нежелательные записи, чтобы отключить их, вместо того, чтобы удалять их полностью. См. Ключaв следующем примере:
    [раздел] 
    # a = a
    b = b
  11. ^ Стандартный синтаксис для продолжения строки здесь относится к последовательности обратной косой черты, за которой следует разрыв строки , как это реализовано iniparser , libconfini иjava.util.Properties
  12. ^ Фредрик Лунд. «Стандартная библиотека Python» . 2001. Раздел «Модуль ConfigParser». п. 143
  13. ^ "ConfigParser - Парсер файла конфигурации" .
  14. ^ Следуя синтаксису языка, с которым он предназначен для работы ( Python ), чтобы охватить узел на несколько строк, ConfigParser требует более глубокого отступа в следующих строках вместо более распространенной обратной косой черты + разрыв строки (см .: configparser - Configuration парсер файлов )
  15. ^ Документация Python по версии
  16. ^ GLib Парсер файла "ключ-значение"
  17. ^ Withnall, Филипп (11 февраля 2021). "glib 2.66.7" . GNOME ftp-release (Список рассылки) . Проверено 12 февраля 2021 года .
  18. ^ Выпуски · GNOME / glib
  19. ^ inifile документация
  20. ^ Релизы · inifile
  21. ^ inih README
  22. ^ Использование отступов, явно следуя подходу ConfigParser (дополнительную информацию см. В документации проекта)
  23. ^ Релизы · benhoyt / inih
  24. ^ iniparser документация
  25. ^ Релизы · ndevilla / iniparser
  26. ^ Свойства (Java Platform SE 8)
  27. ^ «OpenJDK: GPLv2 + исключение пути к классам» . Openjdk.java.net. 1989-04-01 . Проверено 9 февраля 2016 .
  28. ^ "BCL для Java SE" . Oracle.com. 2013-04-02 . Проверено 9 февраля 2016 .
  29. ^ «Обновления OpenJDK 11» . Корпорация Oracle . Проверено 23 января 2021 .
  30. ^ «Обновления OpenJDK 8» . Корпорация Oracle . Проверено 23 января 2021 .
  31. ^ документация libconfini
  32. ^ Релизы · madmurphy / libconfini
  33. ^ PyINI
  34. ^ Теги · whoatemybutter / PyINI
  35. ^ Документация RudeConfig
  36. ^ Релизы · RudeConfig
  37. ^ «12 июня 2018 г. - KB4284835 (сборка ОС 17134.112)» . Служба поддержки Microsoft . Microsoft .
  38. ^ "Выпущено Wine 6.0" . 14 января 2021 . Проверено 14 января 2021 года .
  39. ^ Файлы инициализации и реестр , Windows NT Workstation Resource Kit , Microsoft TechNet
  40. ^ Администрирование реестра NT , Управление реестром Windows NT , Пол Робишо, O'Reilly Media
  41. ^ Системный реестр
  42. ^ Был ли реестр Windows хорошей идеей? - Кодирование ужасов
  43. ^ «Прокомментируйте» .INI-совместимость - достойная цель «проблема на GitHub» .
  44. ^ libconfini / README
  • Инфобокс - http://filext.com/file-extension/INI
  • Инфобокс - https://wikiext.com/ini

Внешние ссылки [ править ]

  • Руководство по функциям библиотеки libconfini : особый синтаксис, разрешенный libconfini.
  • Реализация в Cloanto формата файла INI : особый синтаксис, разрешенный синтаксическим анализатором, реализованным Cloanto.
  • Очень простой метаформат файла данных : учебник по синтаксическому анализатору INI в Apache Groovy.
  • От Microsoft GetPrivateProfileString () и WritePrivateProfileStringA () функции