De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

Un archivo INI es un archivo de configuración para software de computadora que consta de un contenido basado en texto con una estructura y sintaxis que comprende pares clave-valor para propiedades y secciones que organizan las propiedades. [1] El nombre de estos archivos de configuración proviene de la extensión de nombre de archivo INI , para 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 diferentes extensiones de nombre de archivo, como conf y cfg.. [2]

Historia [ editar ]

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, organizado en secciones. Este formato se utilizó para componentes del sistema operativo, como controladores de dispositivo, fuentes, lanzadores de inicio. Los archivos INI también fueron utilizados generalmente por aplicaciones para almacenar configuraciones individuales. [3]

El formato se mantuvo en plataformas Microsoft Windows de 16 bits hasta Windows 3.1x . A partir de Windows 95, Microsoft favoreció el uso del Registro de Windows y comenzó a alejar a los desarrolladores de usar 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 creadas en .NET Framework utilizan archivos XML .config especiales . Las funciones del archivo de inicialización todavía están disponibles en Windows y los desarrolladores pueden seguir utilizándolas.

Los sistemas Linux y Unix también utilizan un formato de archivo similar para la configuración del sistema. Además, el software independiente de la plataforma puede utilizar este formato de archivo para la configuración. Es legible por humanos y fácil de analizar, por lo que es un formato utilizable para archivos de configuración que no requieren mucha mayor complejidad.

Los archivos de configuración de Git son similares a los archivos INI. [4]

PHP utiliza el formato INI para su php.iniarchivo de configuración " " tanto en sistemas Windows como Linux. [5] [6]

Los archivos Desktop.ini determinan la visualización de directorios en Windows, por ejemplo, los iconos de un directorio. [7]

Formato [ editar ]

Claves (propiedades) [ editar ]

El elemento básico contenido en un archivo INI es la clave o propiedad . Cada clave tiene un nombre y un valor, delimitados por un signo igual (=). El nombre aparece a la izquierda del signo igual. 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 valor puede contener cualquier carácter.

nombre = valor

Secciones [ editar ]

Las claves pueden, pero no es necesario, agruparse en secciones con nombres arbitrarios . El nombre de la sección aparece solo en una línea, entre corchetes ( [ y ] ). Todas las claves después de la declaración de la sección están asociadas con esa sección. No hay un delimitador explícito de "fin de sección"; las secciones terminan en la siguiente declaración de sección, o al final del archivo. Las secciones no se pueden anidar.

[sección] a = a b = b

Sensibilidad a mayúsculas y minúsculas [ editar ]

Los nombres de sección y propiedad no distinguen entre mayúsculas y minúsculas en la implementación de Windows, [8] pero otras aplicaciones pueden comportarse de manera diferente.

Comentarios [ editar ]

El punto y coma ( ; ) al principio de la línea indica un comentario . Las líneas de comentario se ignoran.

; comentario de texto

Varias funciones [ editar ]

El formato de archivo INI no está definido de forma rígida universalmente. Muchos programas de computadora admiten funciones más allá de las básicas ya descritas. La siguiente es una lista de algunas características comunes, que pueden implementarse o no en un programa determinado.

Comentarios [ editar ]

Algunos programas admiten el uso del signo de número (#) como alternativa al punto y coma para indicar comentarios. Sin embargo, puede incluirse en el nombre de la clave. Por ejemplo, la siguiente línea crea una variable llamada "#var", pero no una llamada "var"; esto a veces se usa para crear una pseudo-implementación de un comentario.

# var = a

De manera más general, el uso del signo numérico es impredecible, como en las siguientes líneas [se necesita aclaración ] (observe el espacio después del signo numérico en la segunda línea). Por esta razón, el carácter de signo de número no debe usarse para comenzar comentarios. [ según quién? ]

# [sección] # var = a

En algunas implementaciones, un comentario puede comenzar en cualquier lugar de una línea, incluso en la misma línea después de las propiedades o declaraciones de sección. En otros, incluyendo la API de Windows función GetPrivateProfileString , los comentarios deben producirse en las líneas de sí mismos.

Nombres duplicados [ editar ]

La mayoría de las implementaciones solo admiten tener una propiedad con un nombre dado en una sección. La segunda aparición de un nombre de propiedad puede provocar un aborto , puede ser ignorado (y el valor descartado) o puede anular la primera aparición (con el primer valor descartado). Algunos programas utilizan nombres de propiedad duplicados para implementar propiedades de varios valores.

La interpretación de declaraciones de varias secciones con el mismo nombre también varía. En algunas implementaciones, las secciones duplicadas simplemente combinan sus propiedades, como si ocurrieran de forma contigua. Otros pueden abortar o ignorar algún aspecto del archivo INI.

Caracteres de escape [ editar ]

Algunas implementaciones también ofrecen soporte variable para un carácter de escape , generalmente con la barra invertida ( \). Algunos admiten la "continuación de línea", donde una barra invertida seguida inmediatamente por EOL (final de línea) hace que se ignore el salto de línea y que la "línea lógica" continúe en la siguiente línea real del archivo INI. También se observa la implementación de varios "caracteres especiales" con secuencias de escape.

Propiedades globales [ editar ]

También se pueden permitir propiedades "globales" opcionales, que se declaran antes de declarar cualquier sección. [9]

Jerarquía [ editar ]

Por lo general, los archivos INI no tienen jerarquías de secciones dentro de las secciones. Sin embargo, algunos archivos parecen tener una convención de nomenclatura jerárquica. Para la sección A, subsección B, subsección C, propiedad P y valor V, pueden aceptar entradas como [A.B.C]y P=V(Windows ' xstart.ini), [A\B\C]y P=V(el archivo del controlador de IBM Windows devlist.ini) o [A]y B,C,P = V(archivo de Microsoft Visual Studio AEMANAGR.INI).

No está claro si se trata simplemente de convenciones de nomenclatura que una aplicación usa para dar la apariencia de una jerarquía, o si el archivo está siendo leído por un módulo que realmente presenta esta jerarquía al programador de la aplicación.

Delimitador de nombre / valor [ editar ]

Algunas implementaciones permiten dos puntos ( :) como delimitador de nombre / valor (en lugar del signo igual).

Valores cotizados [ editar ]

Algunas implementaciones permiten que los valores sean entrecomillados, típicamente usando comillas dobles y / o apóstrofos . Esto permite la declaración explícita de espacios en blanco y / o la cita de caracteres especiales (igual, punto y coma, etc.). La función estándar de Windows GetPrivateProfileString lo admite y eliminará las comillas que rodean los valores.

Espacio en blanco [ editar ]

La interpretación de los espacios en blanco varía. La mayoría de las implementaciones ignoran los espacios en blanco iniciales y finales alrededor del exterior del nombre de la propiedad. Algunos incluso ignoran los espacios en blanco dentro de los valores (por ejemplo, haciendo que "nombre de host" y "nombre de host" sean equivalentes). Algunas implementaciones también ignoran los espacios en blanco iniciales y finales alrededor del valor de la propiedad; otros consideran que todos los caracteres que siguen al signo igual (incluidos los espacios en blanco) forman parte del valor.

Orden de secciones y propiedades [ editar ]

En la mayoría de los casos, el orden de las propiedades en una sección y el orden de las secciones en un archivo es irrelevante, pero las implementaciones pueden variar.

Ejemplo [ editar ]

El siguiente archivo de ejemplo tiene dos secciones: una para el propietario del software y otra para una conexión a la base de datos de nómina. Los comentarios registran la última persona que modificó el archivo y el motivo de la modificación.

; Última modificación el 1 de abril de 2001 por John Doe [propietario] nombre = Organización John Doe = Acme Widgets Inc.[base de datos] ; use la dirección IP en caso de que la resolución del nombre de la red no funcione servidor = 192.0.2.62 puerto = 143 archivo = "nómina.dat"

Accediendo a archivos INI [ editar ]

En Windows, la API de perfil es la interfaz de programación que se utiliza para leer y escribir configuraciones de archivos .ini 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 siguiente programa C de muestra demuestra la lectura de valores de propiedad del archivo INI de muestra anterior (sea el nombre del archivo de configuración dbsettings.ini):

#include  <windows.h>int  main ( int  argc ,  _TCHAR  * argv []) {  _TCHAR  dbserver [ 1000 ];  int  dbport ;  GetPrivateProfileString ( "base de datos" ,  "servidor" ,  "127.0.0.1" ,  dbserver ,  sizeof ( dbserver )  /  sizeof ( dbserver [ 0 ]),  ". \\ dbsettings.ini" );  dbport  =  GetPrivateProfileInt ( "base de datos",  "puerto" ,  143 ,  ". \\ dbsettings.ini" );  // NB WritePrivateProfileInt () no existe  return  0 ; }

El tercer parámetro de la función GetPrivateProfileString es el valor predeterminado, que son "127.0.0.1" y 143 respectivamente en las dos llamadas de 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 los archivos INI. A menudo, ya están incluidos en marcos y conjuntos de herramientas. Ejemplos de analizadores INI para Unix incluyen GLib , iniparser y libconfini .

Comparación de analizadores INI [ editar ]

Mapeo de archivos [ editar ]

La asignación de archivos de inicialización crea una asignación entre un archivo INI y el Registro . [39] [40] Se introdujo con Windows NT y Windows 95 como una forma de migrar de la configuración de almacenamiento en archivos .ini clásicos al nuevo Registro de Windows . La asignación de archivos captura las llamadas de la API de perfil y, utilizando la configuración de la IniFileMappingsección Registro, dirige las lecturas y escrituras a los lugares apropiados en el Registro.

Usando el ejemplo anterior, 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, digamos, dbsettings.ini . El valor devuelto debe ser la cadena "John Doe":

GetPrivateProfileString ("propietario", "nombre", ..., "c: \\ programas \\ programa antiguo \\ 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 un nombre de entrada que coincida con la sección solicitada. Si se encuentra una entrada, el mapeo INI usa su valor como un puntero a otra parte del Registro. Luego busca la configuración de INI solicitada en esa parte del Registro.

Si no se encuentra un nombre de entrada coincidente y hay una entrada debajo del (Default)nombre de la entrada, el mapeo INI lo usa en su lugar. Por tanto, cada nombre de sección no necesita su propia entrada.

Entonces, en este caso, la llamada de perfil para la sección [propietario] se asigna a:

donde namese encuentra que el nombre de la entrada del registro coincide con la clave INI solicitada. A continuación, el valor de "John Doe" se devuelve a la llamada de perfil. En este caso, el prefijo @ predeterminado evita que las lecturas vayan al archivo dbsettings.ini en el disco. El resultado es que las configuraciones que no se encuentran en el Registro no se buscan en el archivo INI.

La databaseentrada " " del Registro no tiene el prefijo @ en el valor; por lo tanto, para el [base de datos] sección única , ajustes en el registro se toman en primer lugar seguido por la configuración en el archivo dbsettings.ini en el disco.

Alternativas [ editar ]

A partir de Windows 95 , Microsoft comenzó a promover fuertemente el uso del registro de Windows sobre el archivo INI. [41] Los archivos INI suelen estar limitados a dos niveles (secciones y propiedades) y no manejan bien los datos binarios. Sin embargo, esta decisión no ha sido inmune a las críticas, debido al hecho de que el registro es monolítico, opaco y binario, debe estar sincronizado con el sistema de archivos y representa un único punto de falla para el sistema operativo. [42]

Más tarde, los archivos de configuración basados ​​en XML se convirtieron en una opción popular para codificar la configuración en archivos de texto. [ cita requerida ] XML permite niveles y anidamientos arbitrariamente complejos, y tiene 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 del archivo INI. Entre ellos, TOML se parece más a INI, pero se rechazó la idea de hacer TOML deliberadamente compatible con un gran subconjunto de INI. [43]

Sin embargo, los analizadores INI más nuevos permiten el mismo nivel arbitrario de anidación de XML , JSON , TOML y YAML , ofrecen soporte equivalente de valores escritos y Unicode , aunque mantienen el "estado informal" de los archivos INI al permitir múltiples sintaxis para expresar lo mismo. . [44]

Ver también [ editar ]

  • BOOT.INI
  • MSConfig
  • Syseditar
  • SYSTEM.INI
  • TOML , un formato de archivo de configuración muy similar pero más formalmente especificado
  • WIN.INI
  • Amiga 's FIB archivos
  • .DS Store
  • .propiedades

Referencias [ editar ]

  1. ^ Microsoft TechNet: configurar un elemento de archivo Ini
  2. ^ Archivos de inicialización .conf
  3. ^ Microsoft: Kit de recursos de la estación de trabajo de Windows NT
  4. ^ ARCHIVO DE CONFIGURACIÓN de git-config [1]
  5. ^ Rasmus Lerdorf, Kevin Tatroe, Peter MacIntyre. "Programación PHP" . Secciones "parse_ini_file", "Entradas INI de extensión", etc.
  6. ^ Christian Wenz. "Libro de frases PHP y MySQL" . sección "Análisis de archivos INI". cita: "... el formato de archivo INI ... fue muy utilizado en el mundo de Windows, pero hoy también impulsa la configuración de productos de software como PHP. Por ejemplo, ...php.ini"
  7. ^ Codrut Neagu, "¿Por qué hay dos archivos Desktop.ini en mi escritorio y qué hacen?" .
  8. ^ "Función GetPrivateProfileString" . Red de desarrolladores de Microsoft . Microsoft . Consultado el 2 de junio de 2012 .
  9. ^ Documentación de Apache para org.apache.commons.configuration2.INIConfiguration , The Apache Software Foundation
  10. ^ Es una 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 claveaen el siguiente ejemplo:
    [sección] 
    # a = a
    b = b
  11. ^ 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 yjava.util.Properties
  12. ^ Fredrik Lundh. "Biblioteca estándar de Python" . 2001. Sección "El módulo ConfigParser". pag. 143
  13. ^ "ConfigParser - Analizador de archivos de configuración" .
  14. ^ Siguiendo la sintaxis del lenguaje con el que está diseñado para trabajar ( Python ), para abarcar un nodo en varias líneas, ConfigParser requiere una sangría más profundaen las líneas siguientes, en lugar de la barra invertida + salto de línea más común(ver: configparser - Configuración analizador de archivos )
  15. ^ Documentación de Python por versión
  16. ^ Analizador de archivos de clave-valor GLib
  17. Withnall, Philip (11 de febrero de 2021). "simplista 2,66,7" . GNOME ftp-release (lista de correo) . Consultado el 12 de febrero de 2021 .
  18. ^ Lanzamientos · GNOME / glib
  19. ^ documentación de archivo
  20. ^ Lanzamientos · inifile
  21. ^ inih README
  22. ^ Usando sangría, siguiendo explícitamente el enfoque de ConfigParser (consulte la documentación del proyecto para obtener más información)
  23. ^ Lanzamientos · benhoyt / inih
  24. ^ documentación iniparser
  25. ^ Lanzamientos · ndevilla / iniparser
  26. ^ Propiedades (Java Platform SE 8)
  27. ^ "OpenJDK: GPLv2 + Classpath Exception" . Openjdk.java.net. 1989-04-01 . Consultado el 9 de febrero de 2016 .
  28. ^ "BCL para Java SE" . Oracle.com. 2013-04-02 . Consultado el 9 de febrero de 2016 .
  29. ^ "Actualizaciones de OpenJDK 11" . Oracle Corporation . Consultado el 23 de enero de 2021 .
  30. ^ "Actualizaciones de OpenJDK 8" . Oracle Corporation . Consultado el 20 de abril de 2021 .
  31. ^ documentación de libconfini
  32. ^ Lanzamientos · madmurphy / libconfini
  33. ^ PyINI
  34. ^ Etiquetas · whoatemybutter / PyINI
  35. ^ Documentación de RudeConfig
  36. ^ Lanzamientos · RudeConfig
  37. ^ "12 de junio de 2018: KB4284835 (compilación del SO 17134.112)" . Soporte de Microsoft . Microsoft .
  38. ^ "Lanzamiento de Wine 6.0" . 14 de enero de 2021 . Consultado el 14 de enero de 2021 .
  39. ^ Archivos de inicialización y el registro , Kit de recursos para estaciones de trabajo de Windows NT , Microsoft TechNet
  40. ^ Administración del registro de NT , administración del registro de Windows NT , Paul Robichaux, O'Reilly Media
  41. ^ El registro del sistema
  42. ^ ¿Fue el registro de Windows una buena idea? - Horror de codificación
  43. ^ "Comentar sobre" la compatibilidad de .INI es un problema de "objetivo digno en GitHub" .
  44. ^ libconfini / README
  • Cuadro de información: http://filext.com/file-extension/INI
  • Cuadro de información: https://wikiext.com/ini

Enlaces externos [ editar ]

  • Manual de funciones de la biblioteca de libconfini : la sintaxis particular permitida por libconfini.
  • Implementación de Cloanto del formato de archivo INI : La sintaxis particular permitida por un analizador implementado por Cloanto.
  • Un metaformato de archivo de datos muy simple : tutorial del analizador INI en Apache Groovy.
  • De Microsoft GetPrivateProfileString () y WritePrivateProfileStringA () funciones