Un archivo INI es un archivo de configuración para software informático que consiste en texto plano con una estructura y sintaxis que comprende pares clave-valor organizados en secciones. [ 1 ] El nombre de estos archivos de configuración proviene de la extensión de archivo INI , abreviatura de inicialización , utilizada en el sistema operativo MS-DOS , que popularizó este método de configuración de software. El formato se ha convertido en un estándar informal en muchos contextos de configuración, pero muchas aplicaciones en otros sistemas operativos utilizan extensiones de archivo diferentes, como conf y cfg . [ 2 ]
Historia
El mecanismo principal de configuración de software en Windows era originalmente un formato de archivo de texto que comprendía líneas de texto con un par clave-valor por línea, organizadas en secciones. Este formato se utilizaba para componentes del sistema operativo, como controladores de dispositivos, fuentes y programas de inicio. Los archivos INI también eran utilizados generalmente por las aplicaciones para almacenar configuraciones individuales. [ 3 ]
El formato se mantuvo en las plataformas Microsoft Windows de 16 bits hasta Windows 3.1x . A partir de Windows 95 , Microsoft priorizó el uso del Registro de Windows y comenzó a desaconsejar a los desarrolladores el uso de archivos INI para la configuración. Todas las versiones posteriores de Windows han utilizado el Registro de Windows para la configuración del sistema, pero las aplicaciones basadas en .NET Framework utilizan archivos XML .config especiales . Las funciones de archivo de inicialización siguen estando disponibles en Windows y los desarrolladores pueden seguir utilizándolas.
Además del software para Windows, el software multiplataforma puede usar este formato de archivo para la configuración. Algunos archivos de configuración tipo Unix también usan un formato similar. INI es legible y fácil de analizar, por lo que es un formato útil para archivos de configuración que no requieren mucha complejidad.
Predominio
A continuación se presenta una lista no exhaustiva de los lugares donde aparecen los archivos INI.
Desktop.iniLos archivos todavía se utilizan en Windows para configurar las propiedades de los directorios, por ejemplo, para especificar el icono de una carpeta. [ 4 ] [ 5 ]- El archivo de PHP
php.iniemplea el formato INI. [ 6 ] [ 7 ] - El archivo de Git
.git/configestá escrito en formato INI. [ 8 ] - Las entradas de freedesktop.org
*.desktopestán escritas en formato INI. [ 9 ] - Los archivos de configuración de la unidad systemd
*.servicese escriben en INI. [ 10 ] - El archivo de Netatalk
afp.confestá escrito en un lenguaje de configuración de estilo INI. [ 11 ] - El archivo de Pacman
pacman.confestá escrito en INI. [ 12 ] - El archivo de configuración de Forgejo
app.iniestá escrito en INI. [ 13 ] - El archivo de configuración de EditorConfig
.editorconfigestá escrito en INI. [ 14 ]
Ejemplo
El siguiente archivo de ejemplo tiene dos secciones: una para el propietario del software y otra para la conexión a la base de datos de nóminas. Los comentarios registran quién modificó el archivo por última vez y el motivo de la modificación.
; última modificación 1 de abril de 2001 por John Doe [propietario] nombre = John Doe organización = Acme Widgets Inc.[base de datos] ; usar la dirección IP en caso de que la resolución de nombres de red no funcione servidor = 192.0.2.62 puerto = 143 archivo = "payroll.dat"Formato
En un sentido más amplio, INI es un formato informal que se presta bien a la implementación ad hoc, a la vez que permite la configuración humana. En consecuencia, existen muchas especificaciones diferentes (donde a veces la implementación del analizador sintáctico es la única especificación escrita), denominadas dialectos INI .
Las interpretaciones de INI dependen en gran medida del gusto personal y de las necesidades del entorno informático, como la conservación de espacios en blanco, la información sobre el tipo de campo, la distinción entre mayúsculas y minúsculas o los delimitadores de comentarios preferidos. Esto hace que INI sea propenso a proliferar. No obstante, las implementaciones con estilo INI suelen compartir características de diseño comunes: un archivo de texto que consta de un par clave-valor en cada línea, delimitado por un signo igual , organizado en secciones indicadas por corchetes.
En su interpretación más compleja, el formato INI es capaz de expresar expresiones S arbitrarias , lo que lo hace equivalente a formatos estandarizados como XML o JSON , aunque con una sintaxis que no es rígida y que para algunos puede resultar más cómoda.
Dado que el formato de archivo INI no está definido de forma rígida, muchos analizadores admiten características que van más allá de las que conforman el núcleo común. La compatibilidad implementada es muy variable. Se han realizado intentos para crear analizadores capaces de admitir la mayor cantidad posible de dialectos. [ 15 ]
Pares clave-valor
Los datos en INI se almacenan en pares clave-valor llamados clave o propiedad . La clave puede referirse al par clave-valor completo o solo a su clave. Un valor también se llama nombre de propiedad . En su representación textual, el par clave-valor se representa mediante una línea o varias líneas donde el inicio del valor se indica mediante un delimitador , generalmente un signo de igual ( =, ASCII 0x3D), pero a veces también dos puntos ( :, ASCII 0x3A) o un espacio en blanco (utilizado ocasionalmente en el mundo GNU [ 15 ] ). La clave de la clave aparece a la izquierda del delimitador, a menudo no está vacía y no debe contener el delimitador. Algunas variantes permiten secuencias de escape en el valor.
En la implementación de Windows, el signo igual y el punto y coma son caracteres reservados y no pueden aparecer en la clave. El analizador elimina cualquier espacio en blanco que rodee la clave. El valor puede contener cualquier carácter (en el estilo de Windows, no hay espacios en blanco alrededor del delimitador: por ejemplo, IconFile=Folder.ico).
Los pares clave-valor pueden tener el siguiente aspecto textual:
clave = clave=v nombre = valor sem = ; semver = v5822.433.2Secciones
Los pares clave-valor pueden agruparse en una sección . Algunos dialectos INI requieren que cada par clave-valor esté en una sección, otros permiten las llamadas propiedades globales . [ 16 ] Cuando los pares clave-valor se agrupan, el nombre de la sección aparece en una línea aparte, encerrado entre corchetes ( [, ASCII 0x5B, y ], ASCII 0x5D), y se aplica a todos los pares clave-valor en las líneas subsiguientes hasta que se declare otra sección. No hay un delimitador explícito de "fin de sección" (como por ejemplo el de XML ). Por lo tanto, las secciones no pueden anidarse arbitrariamente sintácticamente. Cuando se requiere, el anidamiento puede implementarse aplanando la jerarquía y concatenando con un carácter delimitador personalizado dentro del nombre de la sección (a menudo , ASCII 0x2E). A menudo se admite un nivel de anidamiento, llamado subsecciones .</tag>.
Ejemplo de documento INI que utiliza secciones anidadas:
[proyecto] nombre = servicio de alquiler de huertos (con aplicación) región objetivo = "Área de la Bahía" ; TODO: anunciar puestos vacantes equipo legal = (vacante)[fruta "Manzana"] problemas de marca registrada = gusto previsible = conocido[fruit.Date] sabor = novedoso Problemas de marca registrada = "realmente improbable"[fruta "Frambuesa"] problemas previstos = "logística (fruta frágil)" Problemas de marca registrada = \ posible[fruit.raspberry.proponents.fred] fecha = 2021-11-23, 08:54 +0900 comentario = "Me gusta la fruta roja." [fruit "Date/proponents/alfred"] comentario : Por qué, \ \ \ compraría dátiles. # folding: ¿Se interpreta "\\\\\nn" como "\\n" o "\n"? # ¿O "\\\\" impide el folding? editor = Mi nombre puede contener un \ \ salto de línea.Jerarquía (anidamiento de secciones)
Algunos analizadores permiten el anidamiento de secciones, utilizando puntos como delimitadores de ruta:
[sección] dominio = ejemplo.com[sección.subsección] foo = barEn algunos casos también se admite el anidamiento relativo, donde un punto inicial expresa anidamiento en la sección anterior: [ 15 ]
[sección] dominio = ejemplo.com[.subsección] foo = barraHistóricamente, también han existido formas de expresar anidamiento alternativas al punto (por ejemplo, el archivo de controlador de IBM para Microsoft Windows devlist.ini, en el que se usaba la barra invertida como delimitador de anidamiento en la forma de [A\B\C]; o el archivo de Microsoft Visual Studio AEMANAGR.INI, que usaba una sintaxis completamente diferente en la forma de [A]y B,C,P = V). Algunos analizadores no ofrecían soporte para anidamiento en absoluto y eran ciegos a la jerarquía, pero el anidamiento aún podía emularse parcialmente explotando el hecho de que [A.B.C]constituye un identificador único.
Sensibilidad a mayúsculas y minúsculas
Los nombres de secciones y propiedades en Windows no distinguen entre mayúsculas y minúsculas . [ 17 ] La mayoría de las interpretaciones de INI al estilo Unix prohíben por completo la conversión de mayúsculas y minúsculas, aunque a veces se permite la conversión de mayúsculas y minúsculas para el nombre de la sección [ 18 ] o la clave [ 19 ] .
Comentarios
Una línea con espacios en blanco contiguos al final, seguida de un punto y coma ( ;, ASCII 0x3E), indica un comentario . Algunos dialectos INI permiten además el uso del signo de número ( #, ASCII 0x23) para indicar un comentario, reflejando los comentarios de la shell de Unix . Algunos dialectos INI, pero no todos, permiten un comentario en una línea de par clave-valor o línea de sección (llamado comentario en línea ), donde algunos requieren espacios en blanco que separen el valor o el corchete de cierre de sección del comentario. El signo de número podría, no obstante, estar incluido en el nombre de la clave en algunos dialectos y ser ignorado como tal. Las líneas de comentario están diseñadas para ser ignoradas por un analizador.
#! /bin/convert-ini-to-perl | perl | ssh wikipedia.org upload --sanitise=no ; Ambiguo sin más conocimiento del dialecto INI: ; ¿el valor es "live" o "live # dangerously"? Me gusta = live # dangerously#var = avar = a ; Este es un comentario en línea foo = bar # Este es otro comentario en líneaEn el dialecto de GetPrivateProfileString de la API de Windows , los comentarios deben aparecer en líneas separadas.
Orden de las secciones y propiedades
El orden de las propiedades en una sección y el orden de las secciones en un archivo son irrelevantes.
Nombres duplicados
La mayoría de las implementaciones solo admiten una propiedad con un nombre determinado en una sección. La segunda aparición de un nombre de propiedad puede provocar una interrupción , ignorarse (y descartarse su valor) o sobrescribir la primera aparición (descartándose el primer valor). Algunos programas utilizan nombres de propiedad duplicados para implementar propiedades multivalor.
La interpretación de las declaraciones de varias secciones con el mismo nombre también varía. En algunas implementaciones, las secciones duplicadas simplemente fusionan sus propiedades, como si aparecieran de forma contigua. Otras pueden interrumpir o ignorar algún aspecto del archivo INI.
Valores cotizados
Algunas implementaciones permiten entrecomillar valores, generalmente usando comillas dobles o apóstrofes . Esto permite declarar explícitamente espacios en blanco o entrecomillar caracteres especiales (igual, punto y coma, etc.). La función estándar de Windows GetPrivateProfileString admite esta funcionalidad y elimina las comillas que rodean los valores.
continuación de línea
Emulando la sintaxis de C , algunos dialectos permiten el plegado de línea mediante una barra invertida ( \, ASCII 0x5C) como último carácter de una línea. [ 20 ] En dicha continuación de línea , las barras invertidas seguidas inmediatamente por EOL (fin de línea) hacen que se eliminen la barra invertida y el salto de línea, transformando las líneas del documento en líneas lógicas .
Personajes de escape
Algunos dialectos ofrecen soporte variable para el escape de caracteres , típicamente con el carácter de barra invertida\ ( , ASCII 0x5C) como metacaracter y emulando la sintaxis de C. [ 21 ]
No es prudente interpretar ciegamente las secuencias de escape, ya que algunas especificaciones silencian explícitamente su metacaracter para las secuencias de escape comunes. [ 22 ] [ 23 ]
Acceso a archivos INI
En Windows, la API de perfiles es la interfaz de programación que se utiliza para leer y escribir configuraciones en .iniarchivos clásicos de Windows. Por ejemplo, la función GetPrivateProfileString recupera una cadena de la sección especificada en un archivo de inicialización. (El perfil "privado" se diferencia de GetProfileString, que obtiene la información de WIN.INI ).
El siguiente programa de ejemplo en C demuestra cómo leer los valores de las propiedades del archivo INI de ejemplo anterior (llamemos al archivo de configuración dbsettings.ini):
#include <windows.h>int main ( int argc , TCHAR * argv []){TCHAR dbserver [ 1000 ];int dbport ;GetPrivateProfileString ( TEXT ( "database" ), TEXT ( "server" ), TEXT ( "127.0.0.1" ), dbserver , sizeof ( dbserver ) / sizeof ( dbserver [ 0 ]), TEXT ( ". \\ dbsettings.ini" ));dbport = GetPrivateProfileInt ( TEXT ( "database" ), TEXT ( "port" ), 143 , TEXT ( ". \\ dbsettings.ini" ));// Nota: WritePrivateProfileInt() no existe, solo WritePrivateProfileString().devolver 0 ;}El tercer parámetro de la GetPrivateProfileStringfunción es el valor predeterminado, que son "127.0.0.1"y 143respectivamente en las dos llamadas a la función anteriores. Si el argumento proporcionado para este parámetro es NULL, el valor predeterminado es una cadena vacía, "".
En Unix, existen muchas bibliotecas de configuración diferentes para acceder a archivos INI. A menudo, ya están incluidas en frameworks y conjuntos de herramientas. Algunos ejemplos de analizadores de INI para Unix son GLib , iniparser y libconfini .
Comparación de analizadores INI
Mapeo de archivos
La asignación de archivos de inicialización crea una correspondencia entre un archivo INI y el registro de Windows . [ 59 ] [ 60 ] Se introdujo con Windows NT y Windows 95 como una forma de migrar del almacenamiento de configuraciones en archivos .ini clásicos al nuevo registro. La asignación de archivos intercepta las llamadas a la API de perfil y, utilizando la configuración de la sección IniFileMapping Registry, dirige las lecturas y escrituras a los lugares apropiados en el Registro.
Utilizando el ejemplo a continuación, se podría realizar una llamada de cadena para obtener la clave de nombre de la sección del propietario de un archivo de configuración llamado, por ejemplo, dbsettings.ini . El valor devuelto debería ser la cadena "John Doe":
GetPrivateProfileString ( "owner" , "name" , ... , "c:\\programs\\oldprogram\\dbsettings.ini" );El mapeo INI toma esta llamada a la API de perfil, ignora cualquier ruta en el nombre de archivo dado y verifica si hay una clave de registro que coincida con el nombre de archivo en el directorio:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping
Si existe, busca una entrada cuyo nombre coincida con la sección solicitada. Si encuentra una entrada, el mapeo INI utiliza su valor como puntero a otra parte del Registro. A continuación, busca la configuración INI solicitada en esa parte del Registro.
Si no se encuentra ninguna entrada coincidente y existe una entrada con el nombre (Predeterminado) , el mapeo INI utiliza esa entrada. Por lo tanto, cada nombre de sección no necesita su propia entrada.
Entonces, en este caso, la llamada de perfil para la [owner]sección se asigna a:
donde se encuentra que el nombre de la entrada del Registro coincide con la clave INI solicitada. El valor de "John Doe" se devuelve a la llamada de Perfil. En este caso, el prefijo @ en el valor predeterminado impide que se realicen lecturas al archivo dbsettings.ini en el disco. Como resultado, cualquier configuración que no se encuentre en el Registro no se busca en el archivo INI.
La entrada del Registro " base de datos " no tiene el prefijo @ en el valor; por lo tanto, solo[database] para la sección , se toman primero las configuraciones del Registro seguidas de las configuraciones del archivo dbsettings.ini en el disco.
Alternativas
A partir de Windows 95 , Microsoft comenzó a promover enérgicamente el uso del Registro de Windows en lugar de los archivos INI. [ 61 ] Los archivos INI suelen limitarse a dos niveles (secciones y propiedades) y no manejan bien los datos binarios. Sin embargo, esta decisión no ha estado exenta de críticas, debido a que el registro es monolítico, opaco y binario, debe estar sincronizado con el sistema de archivos y representa un único punto de fallo para el sistema operativo. [ 62 ]
Posteriormente, los archivos de configuración basados en XML se convirtieron en una opción popular para codificar la configuración en archivos de texto. XML permite niveles y anidamiento de complejidad arbitraria y cuenta con mecanismos estándar para codificar datos binarios .
Más recientemente, los formatos de serialización de datos , como JSON , TOML y YAML , pueden servir como formatos de configuración. Estos tres formatos alternativos pueden anidarse arbitrariamente, pero tienen una sintaxis diferente a la de INI. Entre ellos, TOML es el que más se asemeja a INI, pero se rechazó la idea de hacer que TOML fuera deliberadamente compatible con un gran subconjunto de INI. [ 63 ]
Sin embargo, los analizadores INI más recientes también permiten un anidamiento arbitrariamente profundo como XML , JSON , TOML y YAML , ofrecen soporte equivalente para valores tipados y Unicode , aunque mantienen el estatus informal de los archivos INI al permitir múltiples sintaxis para expresar lo mismo. [ 64 ]
Véase también
- BOOT.INI
- Configuración de MS
- Editor del sistema
- SISTEMA.INI
- TOML , un formato de archivo de configuración muy similar pero especificado de forma más formal.
- GANAR.INI
- Archivos IFF de Amiga
- .DS_Store
- .propiedades
Referencias
- ↑ Microsoft TechNet: Configurar un elemento de archivo Ini
- ↑ Archivos de inicialización .conf
- ↑ Microsoft: Kit de recursos para estaciones de trabajo Windows NT
- ↑ Microsoft Learn (8 de febrero de 2022). "Cómo personalizar carpetas con Desktop.ini" . Consultado el 10 de enero de 2024 .
- ↑ Codrut Neagu, "¿Por qué hay dos archivos Desktop.ini en mi escritorio y qué hacen?" .
- ↑ Rasmus Lerdorf, Kevin Tatroe, Peter MacIntyre. "Programación PHP" . Secciones "parse_ini_file", "Entradas INI de extensión", etc.
- ↑ Christian Wenz. "PHP and MySQL Phrasebook" . Sección "Análisis de archivos INI". Cita: "...el formato de archivo INI... se usó ampliamente en el mundo de Windows, pero hoy también controla la configuración de productos de software como PHP. Por ejemplo,...
php.ini" - ↑ "archivo de configuración de git-config" .
- ↑ "Formato básico del archivo" . Specifications.freedesktop.org .
- ↑ "systemd.service" . www.freedesktop.org .
- ↑ "afp.conf — Archivo de configuración de Netatalk" . Consultado el 10 de enero de 2024 .
- ↑ "pacman.conf(5)" . archlinux.org .
- ↑ "Hoja de referencia de configuración" . forgejo.org . Consultado el 12 de marzo de 2025 .
- ↑ "EditorConfig" . editorconfig.org .
- 1 2 3 Manual de funciones de la biblioteca libconfini
- ↑ Documentación de Apache para org.apache.commons.configuration2.INIConfiguration , The Apache Software Foundation
- ↑ Esto incluye la implementación de Windows. Consulte la función "GetPrivateProfileString" . Microsoft Developer Network . Microsoft . Consultado el 2 de junio de 2012 .
- ↑ El proyecto Git. "config.txt" . Consultado el 10 de enero de 2024 .
- ↑ El proyecto Git. "config.txt" . Consultado el 10 de enero de 2024 .
- ↑ El proyecto Git. "config.txt" . Consultado el 10 de enero de 2024 .
- ↑ Implementación de Cloanto
- ↑ El proyecto Git. "config.txt" . Consultado el 10 de enero de 2024 .
- ↑ El proyecto Git. "config.txt" . Consultado el 10 de enero de 2024 .
- ↑ Es práctica común entre los autores de archivos INI comentar las entradas no deseadas para deshabilitarlas, en lugar de eliminarlas por completo. Vea la clave
aen el siguiente ejemplo:[sección] #a=a b=b
- ↑ La sintaxis estándar para la continuación de línea se refiere aquí a la secuencia de una barra invertida seguida de un salto de línea , tal como lo implementan iniparser , libconfini y
java.util.Properties - ↑ Fredrik Lundh. "Biblioteca estándar de Python" . 2001. Sección "El módulo ConfigParser". pag. 143
- ↑ "ConfigParser – Analizador de archivos de configuración" .
- ↑ Siguiendo la sintaxis del lenguaje con el que está diseñado para trabajar ( Python ), para que un nodo ocupe varias líneas, ConfigParser requiere una sangría más profunda en las líneas siguientes, en lugar de la barra invertida + salto de línea más común (ver: configparser — Analizador de archivos de configuración ).
- ↑ Documentación de Python por versión
- ↑ Analizador de archivos clave-valor de GLib
- ↑ Withnall, Philip (11 de febrero de 2021). "glib 2.66.7" . GNOME ftp-release (Lista de correo) . Consultado el 12 de febrero de 2021 .
- ↑ Lanzamientos · GNOME/glib
- ↑ documentación de inifile
- ↑ Lanzamientos · inifile
- ↑ inih README
- ↑ Utilizando sangría, siguiendo explícitamente el enfoque de ConfigParser (consulte la documentación del proyecto para obtener más información).
- ↑ Lanzamientos · benhoyt/inih
- ↑ documentación de iniparser
- ↑ Versiones · iniparser/iniparser
- ↑ Propiedades (Plataforma Java SE 8)
- ↑ "OpenJDK: GPLv2 + Excepción de ruta de clases" . Openjdk.java.net. 1989-04-01 . Consultado el 2016-02-09 .
- ↑ "BCL para Java SE" . Oracle.com. 2 de abril de 2013. Consultado el 9 de febrero de 2016 .
- 1 2 3 4 5 6 "Lanzamientos del kit de desarrollo de Java" . Java.com . Consultado el 26 de abril de 2026 .
- ↑ Documentación de libconfini
- ↑ Lanzamientos · madmurphy/libconfini
- ↑ PHP . " — Analizar un archivo de configuración" . Documentación oficial de PHP . Consultado el 19/07/2022 .
parse_ini_file() - ↑ Licencia PHP v3.01
- ↑ "Versión 8.5.8" . 3 de julio de 2026. Consultado el 4 de julio de 2026 .
- ↑ PyINI
- ↑ Etiquetas · whoatemybutter / PyINI
- ↑ python-ini
- ↑ Documentación de RudeConfig
- ↑ Lanzamientos · RudeConfig
- ↑ "14 de julio de 2026—KB5101649 (compilación del SO 28000.2525)" . Soporte de Microsoft . Microsoft .
- ↑ "18 de julio de 2026: KB5121767 (compilaciones del sistema operativo 26200.8894 y 26100.8894) Fuera de banda" . Soporte de Microsoft . Microsoft .
- ↑ "Lanzamiento de Wine 11.0" . 13 de enero de 2026. Consultado el 16 de enero de 2026 .
- 1 2 3 "configparser en crates.io" . crates.io . 12/12/2022. Archivado del original el 12/12/2022 . Consultado el 12/12/2022 .
- ^ Página de github de java-ini-parser
- ↑ Archivos de inicialización y el Registro , Kit de recursos de la estación de trabajo Windows NT , Microsoft TechNet
- ↑ Administración del Registro NT , Gestión del Registro de Windows NT , Paul Robichaux, O'Reilly Media
- ↑ El registro del sistema
- ↑ ¿Fue buena idea el Registro de Windows? – Coding Horror
- ↑ "Comentario sobre el problema "La compatibilidad con .INI es un objetivo valioso" en GitHub" . GitHub .
- ↑ libconfini/README
- Cuadro de información: https://filext.com/file-extension/INI
- Cuadro de información: https://wikiext.com/ini
Enlaces externos
- Manual de funciones de la biblioteca libconfini : La sintaxis específica permitida por libconfini.
- Implementación de Cloanto del formato de archivo INI : La sintaxis particular permitida por un analizador sintáctico implementado por Cloanto.
- Un tutorial muy sencillo sobre el analizador de metaformatos de archivos de datos : INI en Apache Groovy.
- Las funciones GetPrivateProfileString() y WritePrivateProfileStringA() de Microsoft
- Archivos de configuración
- formatos de archivos informáticos