# INI (formato de arquivo)

O formato de arquivo INI é um padrão informal para arquivos de configuração para algumas plataformas ou software. Arquivos INI são arquivos de texto simples com uma estrutura básica composta de "seções" e "propriedades".
No MS-DOS e plataformas de 16 bits do Windows através do Windows ME e Windows 2000, o arquivo INI serviu como o mecanismo primário para configurar o sistema operacional e as características dos aplicativos instalados, como controladores de dispositivos (drivers), fontes, lançadores de inicialização e coisas que necessitavam ser inicializadas na inicialização do Windows. Arquivos de inicialização INI foram também geralmente utilizados por aplicações para armazenar suas configurações individuais.
No Windows NT a Microsoft introduziu o registro e começou a conduzir os desenvolvedores a se distanciarem do uso de arquivos INI para configuração. Todas as versões posteriores do Windows passaram a utilizar o Registro do Windows para configuração do sistema, e aplicações desenvolvidas com o Framework .NET utilizam arquivos XML .config especiais. Contudo, as APIs ainda existem no Windows e os desenvolvedores ainda podem utilizá-las.
O nome "arquivo INI" vem da extensão de nome de arquivo normalmente utilizada, .INI, que vem de "inicialização". Outras extensões de arquivo de inicialização são .CFG, .conf e .TXT, especialmente ocorrências de 'config.txt'.
Sistemas Linux e Unix também utilizam um formato de arquivo similar para configuração do sistema. Além disso, softwares independentes de plataforma podem usar este formato de arquivo para configuração. Ele é legível e simples para análise, desta forma é um formato útil para arquivos de configuração que não necessitam de muita complexidade.
Alternativas incluem: TOML, YAML, JSON e XML.

## Formato
### Chaves (propriedades)

O elemento básico contido em um arquivo INI é a chave ou propriedade. Toda chave tem um nome e um valor, delimitado por um sinal de igual(=). O nome aparece à esquerda do sinal de igual.

### Seções

Chaves podem (mas não necessitam) ser agrupadas em seções nomeadas arbitrariamente. O nome da seção aparece em uma linha, entre colchetes ([ e ]). Todas as chaves após a declaração de seção são associadas com aquela seção. Não há um delimitador explícito de "final de seção". Elas terminam na próxima declaração de seção ou no final do arquivo e não podem ser aninhadas.

### Sensibilidade à capitalização

Seções e nomes de propriedades não são sensíveis a capitalização na implementação do Windows.

#### Comentários

Ponto-e-vírgula(;) indica o início de um comentário. Comentários continuam até o final da linha. Qualquer coisa entre o ponto e vírgula e o final da linha é ignorada.

### Características variantes

O formato de arquivo INI não é bem definido. Muitos programas suportam características além das características descritas acima. A seguir está uma lista de algumas características comuns, que podem ou não ser implementadas em um dado programa qualquer.

#### Linhas em branco

Alguns programas rudimentares não suportam linhas em branco. Portanto, toda linha deve ser um cabeçalho de seção, um par de parâmetro valor ou um comentário.

#### Espaços em branco

A interpretação de espaços em branco varia. A maioria das implementações ignoram espaços em branco em torno do nome do parâmetro. Algumas ignoram até mesmo espaços em branco dentro de nomes de valores (por exemplo, escrever "host name" é equivalente a escrever "hostname"). Algumas implementações também ignoram espaços em branco à esquerda e à direita em torno dos valores de parâmetros. Outras consideram todos os caracteres seguindo o sinal de igual inclusive espaços em branco como parte do valor.

#### Valores entre aspas

Algumas implementações permitem que valores entre aspas, normalmente usando-se aspas duplas e/ou apóstrofos. Isto possibilita a declaração explícita de espaço em branco e ou caracteres especiais entre aspas (igual, vírgula, etc.). A função padrão do Windows GetPrivateProfileString suporta isto e remove marcas de aspas que delimitam os valores.