← Volver a Common.Application

📄 IniFile

Clase para lectura y manejo de archivos de configuración INI

📊 Descripción General

La clase IniFile es una implementación robusta para leer y manejar archivos de configuración INI. Esta clase proporciona funcionalidades para cargar archivos, acceder a secciones y claves, y soporta diferentes encodings de archivo.

🎯 Propósito de la Clase

  • Lectura de Configuración: Carga y parseo de archivos INI
  • Acceso a Datos: Acceso seguro a secciones y claves
  • Encoding Support: Soporte para diferentes encodings
  • Async Operations: Operaciones asíncronas para archivos
  • Thread Safety: Operaciones seguras en entornos multi-hilo

🔧 Constructores

Constructor Vacío

public IniFile()
Crea una instancia vacía de IniFile. El archivo debe ser cargado posteriormente usando LoadFile.

Constructor con Ruta

public IniFile(string path)
Crea una instancia y carga automáticamente el archivo desde la ruta especificada.

Constructor con Encoding

public IniFile(string path, Encoding encoding)
Crea una instancia y carga el archivo con el encoding específico.

📋 Métodos de Carga

LoadFile (Síncrono)

public void LoadFile(string path)
Carga un archivo INI desde la ruta especificada usando el encoding por defecto.

LoadFile con Encoding

public void LoadFile(string path, Encoding encoding)
Carga un archivo INI con el encoding específico.

LoadFileAsync

public async Task LoadFileAsync(string path)
Carga asíncronamente un archivo INI usando el encoding por defecto.

LoadFileAsync con Encoding

public async Task LoadFileAsync(string path, Encoding encoding)
Carga asíncronamente un archivo INI con el encoding específico.

🔍 Propiedades de Acceso

Sections

string[]
Obtiene un array con todos los nombres de secciones del archivo INI.

Indexador Principal

string? this[string section, string name]
Accede a un valor específico por sección y nombre de clave. Retorna null si no existe.

Indexador con Valor por Defecto

string this[string section, string name, string defaultValue]
Accede a un valor con un valor por defecto si no existe la clave.

🔧 Métodos de Utilidad

GetKeys

public string[] GetKeys(string section)
Obtiene un array con todas las claves de una sección específica.

💡 Ejemplos de Uso

📄 Archivo INI de Ejemplo

[Database] Server=localhost Database=RestMaster UserID=admin Password=secret123 [Application] Name=RestMaster Version=1.0.0 DebugMode=true [Email] SmtpServer=smtp.gmail.com Port=587 UseSSL=true

🔧 Código de Ejemplo

// Cargar archivo INI var iniFile = new IniFile("config.ini"); // Acceder a valores string server = iniFile["Database", "Server"]; string database = iniFile["Database", "Database"]; string user = iniFile["Database", "UserID"]; // Usar valor por defecto string port = iniFile["Email", "Port", "587"]; // Obtener todas las secciones string[] sections = iniFile.Sections; // Obtener todas las claves de una sección string[] keys = iniFile.GetKeys("Database"); // Carga asíncrona await iniFile.LoadFileAsync("config.ini", Encoding.UTF8);

🔍 Características de Parsing

📝 Reglas de Parsing

  • Secciones: Definidas con corchetes [SectionName]
  • Claves-Valores: Formato key=value
  • Comentarios: Líneas que comienzan con ; son ignoradas
  • Espacios: Se eliminan automáticamente espacios en blanco
  • Líneas Vacías: Se ignoran líneas vacías o con solo espacios

🔧 Casos Especiales

  • UserID Especial: Manejo especial para UserID con múltiples valores
  • Duplicados: Si una clave existe, se actualiza su valor
  • Secciones Vacías: Se pueden crear secciones sin claves
  • Encoding: Soporte para UTF-8, ASCII y otros encodings

🎯 Casos de Uso

🔧 Escenarios de Uso

  • Configuración de Base de Datos: Parámetros de conexión
  • Configuración de Aplicación: Parámetros generales
  • Configuración de Servicios: APIs y servicios externos
  • Configuración de Logging: Parámetros de logging
  • Migración de Configuración: Conversión de formatos

📊 Ventajas del Diseño

  • Simplicidad: API simple y fácil de usar
  • Performance: Carga eficiente de archivos
  • Flexibilidad: Soporte para diferentes encodings
  • Thread Safety: Seguro para uso multi-hilo
  • Async Support: Operaciones asíncronas disponibles

🔗 Integración con Otros Componentes

📚 Componentes Relacionados

  • AliConfigReader: Utiliza IniFile para leer configuraciones de BD
  • Back.API: Puede usar IniFile para configuración
  • Back.Application: Servicios que requieren configuración
  • RMAuth: Configuración de autenticación

🎯 Patrones Relacionados

  • Singleton Pattern: Para archivos de configuración
  • Factory Pattern: Para creación de configuraciones
  • Sealed Class: Clase sellada para evitar herencia
  • Async/Await: Patrón asíncrono para operaciones de archivo