CLR: .Net / Mono / Boo / Otros CLR > VB .NET

[Código Fuente] Emular archivos INI como XML

(1/1)

Anónimo:
La siguiente es una clase que programé en un intento desesperado por encontrar en la documentación de .net FrameWork SDK la manera de acceder a archivos de configuración (los archivos .ini con los que se suelen preconfigurar las aplicaciones en Windows)

Esta clase emula la manera de escribir en un nodo de un archivo XML, y de leer la misma información, está abierto a sugerencias, dudas y reclamos, además me clarificó cómo trabajar con el modelo DOM para .NET

PD. Estuve chequeando la manera de trabajar con archivos de configuracíon (aplicativo.exe.config) pero esta manera sólo permite leer datos, mas no escribirlos... cualquier ayuda será eternamente argadecida


Aquí va la clase:


--- Código: vb.net ---Imports SystemImports System.Xml Public Class Ini_Xml        Public Function StrLeerClave(strArchivo as String, strSeccion as String, strClave as String, strValorPorDefecto as String) as String                StrLeerClave = strValorPorDefecto                Dim doc As New XmlDocument()                doc.Load(strArchivo)                Dim root As XmlNode = doc.DocumentElement                Dim i, j As Integer                dim strSeccionActual as string                'Despliega el contenido de los nodos hijos                If root.HasChildNodes Then                ' Exploración de secciones                        For i = 0 To root.ChildNodes.Count - 1                                Dim Secciones As XmlNode = root.ChildNodes(i)                                strSeccionActual = Secciones.Name                                If strSeccionActual = strSeccion then                                ' Si es la sección que están pidiendo en el argumento                                        If Secciones.HasChildNodes then                                        ' Exploración de claves                                                For j = 0 To Secciones.ChildNodes.Count - 1                                                        If Secciones.ChildNodes(j).Name = strClave then                                                                StrLeerClave = Secciones.ChildNodes(j).InnerText                                                                Exit Function                                                        End If                                                Next j                                        else                                                'Secciones no tiene hijos                                        End if                                End If                        Next i                Else                        'Root no tiene hijos                End If        End Function         Public Function blnEscribirClave(strArchivo as String, strSeccion as String, strClave as String, strValorAEscribir as String) as Boolean                ' Esta función escribe en el nodo si ya existe,                ' Hace falta implementar que no reciba espacios en blanco, control de errores                blnEscribirClave = False                Dim doc As New XmlDocument()                Try                        doc.Load(strArchivo)                Catch ex as System.Io.FileNotFoundException                ' Crear archivo con un solo nodo principal                        blnCrearArchivo(strArchivo)                'Catch ex as System.Xml.XmlException                ' Errores de XML                Finally                        doc.Load(strArchivo)                End Try                Dim root As XmlNode = doc.DocumentElement                Dim i, j As Integer                Dim strSeccionActual as String                'Despliega el contenido de los nodos hijos                If root.HasChildNodes Then                ' Exploración de secciones                        For i = 0 To root.ChildNodes.Count - 1                                Dim Secciones As XmlNode = root.ChildNodes(i)                                strSeccionActual = Secciones.Name                                                               If strSeccionActual = strSeccion Then                                ' Si es la sección que están pidiendo en el argumento                                        If Secciones.HasChildNodes Then                                        ' Exploración de claves                                                For j = 0 To Secciones.ChildNodes.Count - 1                                                        If Secciones.ChildNodes(j).Name = strClave Then                                                                Secciones.ChildNodes(j).InnerText = strValorAEscribir                                                                doc.Save(strArchivo)                                                                blnEscribirClave = True                                                                Exit Function                                                        End If                                                Next j                                                ' Si pasa por acá y la clave no coincide, cree una nueva clave                                                Dim OtraClave As XmlElement = doc.CreateElement(strClave)                                                ' Asignar en el texto el Valor a escribir                                                OtraClave.InnerText = strValorAEscribir                                                ' Añadir el nodo a la sección                                                Secciones.AppendChild(OtraClave)                                                'Clave no existe, creada                                                ' Guardar el documento                                                doc.Save(StrArchivo)                                                blnEscribirClave = True                                                Exit Function                                        Else                                        ' Secciones no tiene hijos                                        ' Si pasa por acá y la clave no coincide, cree una nueva clave                                                Dim OtraClave As XmlElement = doc.CreateElement(strClave)                                                ' Asignar en el texto el Valor a escribir                                                OtraClave.InnerText = strValorAEscribir                                                ' Añadir el nodo a la sección                                                Secciones.AppendChild(OtraClave)                                                'Clave no existe, creada                                                ' Guardar el documento                                                doc.Save(StrArchivo)                                                blnEscribirClave = True                                                Exit Function                                        End if                                End if                        Next i                        ' Si pasa por acá y la sección no coincide, cree una nueva sección                        Dim seccion As XmlElement = doc.CreateElement(strSeccion)                        ' Añadir el nodo al documento                        root.AppendChild(seccion)                        ' Crear el elemento de Clave                        Dim Clave As XmlElement = doc.CreateElement(strClave)                        ' Asignar en el texto el Valor a escribir                        Clave.InnerText = strValorAEscribir                        ' Añadir el nodo a la sección                        seccion.AppendChild(Clave)                        ' Guardar el documento                        doc.Save(StrArchivo)                        blnEscribirClave = True                        Exit Function                Else                ' Root no tiene hijos, crearle un hijo                        ' Crear el elemento de Sección                        Dim seccion As XmlElement = doc.CreateElement(strSeccion)                        ' Añadir el nodo al documento                        root.AppendChild(seccion)                        ' Crear el elemento de Clave                        Dim Clave As XmlElement = doc.CreateElement(strClave)                        ' Asignar en el texto el Valor a escribir                        Clave.InnerText = strValorAEscribir                        ' Añadir el nodo a la sección                        seccion.AppendChild(Clave)                        ' Guardar el documento                        doc.Save(StrArchivo)                        blnEscribirClave = True                        Exit Function                End If        End Function         Public Function blnCrearArchivo(strArchivo as String) as Boolean                ' Crear el XmlDocument.                Dim doc as XmlDocument = new XmlDocument()                Dim xmlData as string = "<principal></principal>"                doc.Load(new StringReader(xmlData))                doc.Save(strArchivo)        End FunctionEnd Class
Autor: Jhonny D. Cano

Eternal Idol:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/mslu/winprog/unicode_layer_ini_file_functions.asp

Solo comentar que estas son las funciones de la API de Windows.

Anónimo:
Alguién podría explicarme cómo se utiliza la API de Windows en .NET? Gracias de antemano

Navegación

[0] Índice de Mensajes

Ir a la versión completa