[Source] Solución administrada para crear configuración portable en archivos INI

Iniciado por Eleкtro, 17 Diciembre 2015, 17:49 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

.Net nos ofrece varias alternativas para guardar la configuración de usuario, cómo la serialización de datos, la infrastructura My.Settings, o recurrir al registro de windows, sin embargo, y al menos para mi, un archivo de inicialización (archivo.INI) sigue siendo la mejor forma para portabilizar la configuración de un software, ya que el formato es muy amistoso de cara al end-user (¿quien no sabe editar un INI?), es perfecto para desarrollar software portable y mantener la misma configuración de usuario al copiarlo de un PC a otro, así que he ideado este algoritmo en conjunción para la manipulación de archivos INI usando código administrado (un parser de cosecha propia, sin recurrir a código no administrado con las funciones de la API de Windows que leen archivos INI).

El resultado de todo esto es bastante código, un Type para representar una sección INI, otro Type para representar una llave de una sección INI, etc, pero solo es necesario copiar y pegar todo el código que he desarrollado, ya que su utilización es tan simple como lo que voy a mostrar a continuación...

Ejemplo de uso para crear un INI con una sección y un valor booleano:
Código (vbnet) [Seleccionar]
Dim ini As New IniManager("C:\File.ini", Encoding.Default)

With ini

   .Clear()

   .Sections.Add("SectionName")
   .Sections("SectionName").Keys.Add("KeyName", value:="", comment:="Commentary")
   .Sections("SectionName").Keys("KeyName").Value = "True"

   .Save()

End With

Console.WriteLine(ini.ToString)




Para obtener el valor, lo hariamos así:
Código (vbnet) [Seleccionar]
Dim setting As Boolean = CBool(ini.Sections("SectionName").Keys("KeyName").Value)

Tiene métodos de búsqueda de secciones y llaves, y demás.




IniSection, representa una sección INI:
http://pastebin.com/8mJUZ2Nb

IniKey, representa una llave INI:
http://pastebin.com/eE1ZSnFG

IniSectionCollection, representa una colección de secciones INI:
http://pastebin.com/jcFJ0yYd

IniKeyCollection, representa una colección de llaves INI:
http://pastebin.com/CLfBtB1h

IniManager, lo más importante, la class que administra de manera abstracta los Types mencionados para la manipulación de un archivo INI:
http://pastebin.com/xgy93Saq

Espero que a alguien más le sirva.

Saludos!