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
Ir a la versión completa