.ini (Initialization File)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 23:47, 31 октября 2017.
.ini (Initialization File)
Расширение файла .ini
Тип кода текстовый файл
Разработчик Microsoft Windows
Начальная версия 20 November 1985 года; 33 years ago (1985-11-20)
Последний релиз
начиная с Windows 95 замещается Реестром Windows
Тип формата текстовый файл
Содержится Microsoft Windows
Открытый формат? Yes

ini-файл (англ. Initialization file) — это файл конфигурации, который содержит данные настроек для Microsoft Windows, Microsoft Windows NT и некоторых приложений.

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

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

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

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

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

Формат

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

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

name=value

Sections

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

[section]
a=a
b=b

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

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

Комментарии

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

; комментарий

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

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

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

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

Комментарии

Некоторые программы поддерживают использование знака (#) в качестве альтернативы точки с запятой для указания комментариев. Практически говоря, использование его для начала строки может эффективно изменить имя переменной в этой строке. Например, следующая строка создает переменную с именем "#var", но не с именем "var"; Это иногда используется для создания псевдореализации комментария.

#var=a

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

#[section]
# var=a

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

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

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

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

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

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

Иерархия

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

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

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

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

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

Пробелы

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

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

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

Пример

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

; last modified 1 April 2001 by John Doe
[owner]
name=John Doe
organization=Acme Widgets Inc.

[database]
; use IP address in case network name resolution is not working
server=192.0.2.62     
port=143
file="payroll.dat"

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

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

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

#include <windows.h>

int main(int argc, _TCHAR *argv[])
{
  _TCHAR dbserver[1000];
  int dbport;
  GetPrivateProfileString("database", "server", "127.0.0.1", dbserver, sizeof(dbserver) / sizeof(dbserver[0]), ".\\dbsettings.ini");
  dbport = GetPrivateProfileInt("database", "port", 143, ".\\dbsettings.ini");
  // N.B. WritePrivateProfileInt() does not exist
  return 0;
}

UNIX

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

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

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

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

GetPrivateProfileString("owner", "name", ... , "c:\\programs\\oldprogram\\dbsettings.ini");

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

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\
   CurrentVersion\IniFileMapping

Если он существует, он ищет имя записи, соответствующее запрашиваемому разделу. Если запись найдена, 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-файл.

Источники

  1. Configure an Ini File Item // Microsoft. URL: http://technet.microsoft.com/en-us/library/cc731332.aspx (Дата обращения: 20.05.2017)
  2. Windows NT Workstation Resource Kit // Microsoft. URL: https://www.microsoft.com/resources/documentation/windowsnt/4/workstation/reskit/en-us/26_ini.mspx (Дата обращения: 20.05.2017)
  3. GetPrivateProfileString function // Microsoft . URL: http://msdn.microsoft.com/en-us/library/ms724353.aspx (Дата обращения: 20.05.2017)
  4. INIConfiguration // The Apache Software Foundation. URL: http://msdn.microsoft.com/en-us/library/ms724353.aspx (Дата обращения: 20.05.2017)
  5. Windows NT Workstation Resource Kit // Microsoft. URL: http://msdn.microsoft.com/en-us/library/ms724353.aspx (Дата обращения: 20.05.2017)
  6. The System Registry 1996г. // Microsoft. URL: https://msdn.microsoft.com/en-us/library/ms970651.aspx (Дата обращения: 20.05.2017)