stringtranslate.com

archivo INI

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

El mecanismo principal de configuración de software en Windows era originalmente un formato de archivo de texto que constaba de líneas de texto con un par clave-valor por línea, organizadas en secciones. Este formato se utilizó para componentes del sistema operativo, como controladores de dispositivos, fuentes y lanzadores de inicio. Las aplicaciones también utilizaban generalmente los archivos INI 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 del 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 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 aún pueden usarlas.

Además del software de Windows, el software independiente de la plataforma puede utilizar este formato de archivo para la configuración. Algunos archivos de configuración similares a Unix también utilizan un formato similar. INI 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.

Predominio

Lo que sigue es una lista no exhaustiva de lugares en los que aparecen los archivos INI.

Ejemplo

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 = John Doe organización = 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 = "payroll.dat"       

Formato

En su sentido más amplio, INI es un formato informal que se presta bien a la implementación ad hoc sin dejar de ser configurable por humanos. En consecuencia, existen muchas especificaciones variables (donde a veces la implementación de un analizador es la única especificación jamás escrita), llamadas dialectos INI .

Si bien las interpretaciones de INI dependen en gran medida del gusto personal y del entorno informático (por ejemplo: la necesidad de datos con espacios en blanco exactos; la necesidad de información de tipo de campo; Windows prefiere el plegado de mayúsculas y minúsculas, Unix prefiere distinguir entre mayúsculas y minúsculas; #-comentarios demarcados tomados prestados de los scripts de Unix), lo que hace que INI sea propenso a la proliferación, existe un núcleo duro con el que normalmente se asocia el sabor de INI : basado en texto y en líneas, se eliminan los espacios en blanco, se ignoran las líneas vacías y las líneas de comentarios (p. ej. ; registers to system-wide mailcap, # workaround for d5cb328), los corchetes indican secciones (p. ej. [Unit], [branch "master"]), datos como pares clave-valor a menudo demarcados con un signo igual (ASCII 0x3D) (p. ej IconFile=Folder.ico., time machine = yes).

Existen intentos de crear analizadores capaces de soportar tantos dialectos como sea posible, [13] y en su interpretación más complicada, 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 está escrita en piedra y que para algunos puede resultar más cómoda.

Como el formato de archivo INI no está definido de forma rígida, muchos analizadores admiten funciones más allá de las que forman el núcleo común. El soporte implementado es altamente volátil.

Pares clave-valor

Los datos en INI se guardan en pares clave-valor llamados clave o propiedad . Por lo tanto, la clave puede referirse a todo el par clave-valor o solo a su clave. Un valor también se llama nombre de propiedad . En su representación textual, el par clave-valor está representado por una línea o una línea múltiple donde el inicio del valor se indica mediante un delimitador , generalmente un signo igual ( =, ASCII 0x3D) pero a veces también dos puntos ( :, ASCII 0x3A ). ) o espacios en blanco (usados ​​ocasionalmente en el mundo GNU [13] ). La clave de la clave aparece a la izquierda del delimitador, a menudo no está vacía y no debe contener el delimitador. Algunos tipos 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, ningún espacio en blanco rodea el delimitador: por ejemplo IconFile=Folder.ico).

Los pares clave-valor pueden verse textualmente así:

clave = clave = v nombre = valor sem = ; semver = v5822.433.2  

Secciones

Los pares clave-valor se pueden agrupar en una sección . Algunos dialectos INI requieren que cada par clave-valor esté en una sección, algunos permiten las llamadas propiedades globales . [14] Cuando se agrupan pares clave-valor, el nombre de la sección aparece en una línea sola, entre corchetes ( [, ASCII 0x5B y ], ASCII 0x5D) y se aplica a todos los pares clave-valor en líneas posteriores hasta otra sección. está declarado. No existe un delimitador explícito de "fin de sección" (como, por ejemplo, XML </tag>. Por lo tanto, las secciones sintácticamente no se pueden anidar arbitrariamente. Cuando sea necesario, el anidamiento se puede implementar 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, denominado subsecciones .

Documento INI de ejemplo que emplea secciones anidadas:

[proyecto] nombre = servicio de alquiler de huertos (con aplicación) región de destino = "Área de la Bahía" ; TODO: anunciar puestos vacantes equipo legal = (vacante)      [fruta "Apple"] problemas de marca = sabor previsible = conocido    [fruit.Date] sabor = novela Problemas de marcas comerciales = "realmente improbable"  [fruta "Frambuesa"] problemas previstos = "logística (fruta frágil)" Problemas de marcas = \ posibles  [fruit.raspberry.proponents.fred] fecha = 2021-11-23, 08:54 +0900 comentario = "Me gustan las frutas rojas". [fruta "Fecha/proponentes/alfred"] comentario : Vaya,  \ \ \ Compraría dátiles. # plegado: ¿Se interpreta "\\\\\nn" como "\\n" o "\n"? # ¿O "\\\\" impide el plegado? editor = Mi nombre puede contener una \ \ nueva 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 = barra  

En algunos casos, también se admite el anidamiento relativo, donde un punto inicial expresa el anidamiento con la sección anterior: [13]

[sección] dominio = ejemplo.com  [.subsección] foo = barra  

Históricamente, también han existido formas de expresar el anidamiento alternativo al punto (por ejemplo, el archivo del controlador de IBM para Microsoft Windows devlist.ini, en el que la barra invertida se utilizaba como delimitador de anidamiento en forma de [A\B\C]; o el archivo de Microsoft Visual Studio AEMANAGR.INI, que utilizaba una sintaxis completamente diferente). en forma de [A]y B,C,P = V). Algunos analizadores no ofrecían ningún soporte de anidamiento 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 entre mayúsculas y minúsculas

Los nombres de secciones y propiedades en Windows no distinguen entre mayúsculas y minúsculas . [15] La mayoría de las interpretaciones INI de estilo Unix prohíben por completo el plegado de mayúsculas y minúsculas, aunque a veces se permite el plegado de mayúsculas y minúsculas para el nombre de la sección [16] o la clave [17] .

Comentarios

Una línea con espacios en blanco contiguos seguidos de un punto y coma ( ;, ASCII 0x3E) indica un comentario . Además, algunos dialectos INI permiten el uso del signo numérico ( #, ASCII 0x23) para indicar un comentario, reflejando los comentarios del 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 (llamada comentario en línea ), donde algunos requieren espacios en blanco que separan el valor o el corchete de cierre de sección del comentario. No obstante, es posible que el signo numérico se incluya en el nombre de la clave en algunos dialectos y se ignore como tal. Las líneas de comentarios están diseñadas para que un analizador las ignore.

#! /bin/convertir-ini-a-perl | perla | carga ssh wikipedia.org --sanitise=no ; Ambiguo sin mayores conocimientos del dialecto INI: ; ¿El valor es "vivo" o "vivo #peligrosamente"? Me gusta = vivir #peligrosamente   #var=avar = a ; Este es un comentario en línea foo = bar # Este es otro comentario en línea      

Según el dialecto GetPrivateProfileString de WinAPI , los comentarios deben aparecer en líneas por sí solos.

Orden de secciones y propiedades.

El orden de las propiedades de una sección y el orden de las secciones de un archivo son irrelevantes.

Nombres duplicados

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

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

Valores cotizados

Algunas implementaciones permiten citar valores, normalmente utilizando comillas dobles y/o apóstrofes . Esto permite la declaración explícita de espacios en blanco y/o el uso de comillas de caracteres especiales (igual, punto y coma, etc.). La función estándar de Windows GetPrivateProfileString admite esto y eliminará las comillas que rodean los valores.

Continuación de línea

Al emular la sintaxis de C , algunos dialectos permiten doblar líneas mediante una barra invertida ( \, ASCII 0x5C) como último carácter de una línea. [18] En dicha continuación de línea , las barras invertidas seguidas inmediatamente por EOL (fin de línea) hacen que la barra invertida y el salto de línea se eliminen, transformando las líneas del documento en líneas lógicas .

personajes de escape

Algunos dialectos ofrecen distintos soportes para el escape de caracteres , normalmente con el carácter de barra invertida ( \, ASCII 0x5C) como metacarácter y emulando la sintaxis de C. [19]

No es aconsejable interpretar ciegamente las secuencias de escape, ya que algunas especificaciones silencian explícitamente su metacarácter para secuencias de escape comunes. [20] [21]

Accediendo a archivos INI

En Windows, Profile API es la interfaz de programación utilizada para leer y escribir configuraciones de .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 contrasta con GetProfileString, que se obtiene de WIN.INI ).

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):

#incluir <ventanas.h> int principal ( int argc , _TCHAR * argv [])    { _TCHAR servidor de base de datos [ 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, sólo WritePrivateProfileString() devolver 0 ; }

El tercer parámetro de la GetPrivateProfileStringfunción es el valor predeterminado, que se encuentra "127.0.0.1"y 143respectivamente en las dos llamadas a funciones 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 incluidos en marcos y kits de herramientas. Ejemplos de analizadores INI para Unix incluyen GLib, iniparser y libconfini.

Comparación de analizadores INI

Mapeo de archivos

La asignación de archivos de inicialización crea una asignación entre un archivo INI y el registro de Windows . [57] [58] Se introdujo con Windows NT y Windows 95 como una forma de migrar desde el almacenamiento de configuraciones en .iniarchivos clásicos al nuevo registro. La asignación de archivos atrapa las llamadas de la API de perfil y, utilizando la configuración de la sección Registro IniFileMapping , dirige las lecturas y escrituras a los lugares apropiados en el Registro.

Utilizando el siguiente ejemplo, se podría realizar una llamada de cadena para recuperar la clave de nombre de la sección de propietario de un archivo de configuración llamado, por ejemplo, dbsettings.ini. El valor devuelto debe ser la cadena "John Doe":

GetPrivateProfileString ( "propietario" , "nombre" , ... , "c:\\programs\\oldprogram\\dbsettings.ini" );    

El mapeo INI toma esta llamada de 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 utiliza su valor como puntero a otra parte del Registro. Luego busca la configuración INI solicitada en esa parte del Registro.

Si no se encuentra ningún nombre de entrada coincidente y hay una entrada bajo el nombre de entrada (predeterminado) , la asignación INI la utiliza 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 se encuentra que el nombre de la entrada del Registro " name " coincide con la clave INI solicitada. Luego, el valor de "John Doe" se devuelve a la llamada de perfil. En este caso, el prefijo @ predeterminado evita que cualquier lectura vaya al dbsettings.iniarchivo en el disco. El resultado es que 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 para la [database]sección , la configuración del Registro se toma primero, seguida de la configuración del archivo en el disco.dbsettings.ini

Alternativas

A partir de Windows 95 , Microsoft comenzó a promover fuertemente el uso del registro de Windows sobre los archivos INI. [59] Los archivos INI normalmente están limitados a dos niveles (secciones y propiedades) y no manejan bien los datos binarios. Esta decisión, sin embargo, no ha estado inmune a las 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 falla para el sistema operativo. [60]

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. [ cita necesaria ] 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 que TOML fuera deliberadamente compatible con un gran subconjunto de INI. [61]

Sin embargo, los analizadores INI más nuevos permiten el mismo nivel arbitrario de anidamiento 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. . [62]

Ver también

Referencias

  1. ^ Microsoft TechNet: configurar un elemento de archivo INI
  2. ^ Archivos de inicialización .conf
  3. ^ Microsoft: Kit de recursos para estaciones de trabajo Windows NT
  4. ^ Microsoft Learn (8 de febrero de 2022). "Cómo personalizar carpetas con Desktop.ini" . Consultado el 10 de enero de 2024 .
  5. ^ Codrut Neagu, "¿Por qué hay dos archivos Desktop.ini en mi escritorio y qué hacen?".
  6. ^ Rasmus Lerdorf, Kevin Tatroe, Peter MacIntyre. "Programación PHP". Secciones "parse_ini_file", "Entradas de extensión INI", etc.
  7. ^ Christian Wenz. "Libro de frases de 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 en día también impulsa la configuración de productos de software como PHP. Por ejemplo,... php.ini"
  8. ^ "ARCHIVO DE CONFIGURACIÓN git-config".
  9. ^ "Formato básico del archivo". especificaciones.freedesktop.org .
  10. ^ "servicio.systemd". www.freedesktop.org .
  11. ^ "afp.conf: archivo de configuración de Netatalk" . Consultado el 10 de enero de 2024 .
  12. ^ "pacman.conf(5)". archlinux.org .
  13. ^ Manual de funciones de la biblioteca de abc libconfini
  14. ^ Documentación de Apache para org.apache.commons.configuration2.INIConfiguration, The Apache Software Foundation
  15. ^ Esto incluye la implementación de Windows. Consulte "Función GetPrivateProfileString". Red de desarrolladores de Microsoft . Microsoft . Consultado el 2 de junio de 2012 .
  16. ^ El proyecto Git. "config.txt" . Consultado el 10 de enero de 2024 .
  17. ^ El proyecto Git. "config.txt" . Consultado el 10 de enero de 2024 .
  18. ^ El proyecto Git. "config.txt" . Consultado el 10 de enero de 2024 .
  19. ^ Implementación de Cloanto
  20. ^ El proyecto Git. "config.txt" . Consultado el 10 de enero de 2024 .
  21. ^ El proyecto Git. "config.txt" . Consultado el 10 de enero de 2024 .
  22. ^ Es una práctica común entre los autores de archivos INI "comentar" las entradas no deseadas para desactivarlas, en lugar de eliminarlas por completo. Vea la clave aen el siguiente ejemplo:
    [sección] 
    #a=a
    b=b
  23. ^ 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
  24. ^ Fredrik Lundh. "Biblioteca estándar de Python". 2001. Sección "El módulo ConfigParser". pag. 143
  25. ^ "ConfigParser: analizador de archivos de configuración".
  26. ^ 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 profunda en las líneas que siguen, en lugar de la barra invertida + salto de línea más común (consulte: configparser — Configuración analizador de archivos)
  27. ^ Documentación de Python por versión
  28. ^ Analizador de archivos clave-valor GLib
  29. ^ Withnall, Philip (11 de febrero de 2021). "simplista 2.66.7". Lanzamiento ftp de GNOME (lista de correo) . Consultado el 12 de febrero de 2021 .
  30. ^ Lanzamientos · GNOME/glib
  31. ^ documentación inicial
  32. ^ Lanzamientos · inifile
  33. ^ inih LÉAME
  34. ^ Usando sangría, siguiendo explícitamente el enfoque de ConfigParser (consulte la documentación del proyecto para obtener más información)
  35. ^ Lanzamientos · benhoyt/inih
  36. ^ documentación del analizador inicial
  37. ^ Lanzamientos · iniparser/iniparser
  38. ^ Propiedades (Plataforma Java SE 8)
  39. ^ "OpenJDK: GPLv2 + excepción de Classpath". Openjdk.java.net. 1989-04-01 . Consultado el 9 de febrero de 2016 .
  40. ^ "BCL para Java SE". Oracle.com. 2013-04-02 . Consultado el 9 de febrero de 2016 .
  41. ^ "Lanzamientos de JDK". Corporación Oráculo . Consultado el 9 de diciembre de 2022 .
  42. ^ "Lanzamientos de JDK". Corporación Oráculo . Consultado el 17 de enero de 2024 .
  43. ^ documentación de libconfini
  44. ^ Lanzamientos · madmurphy/libconfini
  45. ^ PHP . "parse_ini_file(): analiza un archivo de configuración". Documentación oficial de PHP . Consultado el 19 de julio de 2022 .
  46. ^ Licencia PHP v3.01[1]
  47. ^ "Versión 8.3.8".
  48. ^ PyINI
  49. ^ Etiquetas · whoatemybutter / PyINI
  50. ^ Python-ini
  51. ^ Documentación de RudeConfig
  52. ^ Lanzamientos · RudeConfig
  53. ^ "28 de junio de 2024: KB5039304 (compilación del sistema operativo 26100.1000)". Soporte de Microsoft . Microsoft .
  54. ^ "Lanzamiento de Wine 9.0". 16 de enero de 2024 . Consultado el 16 de enero de 2024 .
  55. ^ abc "configparser en crates.io". cajas.io . 2022-12-12. Archivado desde el original el 12 de diciembre de 2022 . Consultado el 12 de diciembre de 2022 .
  56. ^ página de github java-ini-parser
  57. ^ Archivos de inicialización y registro, kit de recursos de estación de trabajo Windows NT , Microsoft TechNet
  58. ^ Administrar el Registro NT, Administrar el Registro Windows NT , Paul Robichaux, O'Reilly Media
  59. ^ El registro del sistema
  60. ^ ¿Fue el Registro de Windows una buena idea? – Codificación de terror
  61. ^ "Comentar sobre el problema" La compatibilidad .INI es un objetivo digno "en GitHub". GitHub .
  62. ^ libconfini/README

enlaces externos