• Miércoles 20 de Noviembre de 2024, 18:39

Autor Tema: [Código Fuente] Emular archivos INI como XML  (Leído 4896 veces)

Anónimo

  • Visitante
[Código Fuente] Emular archivos INI como XML
« en: Miércoles 16 de Junio de 2004, 22:55 »
0
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
  1. Imports System
  2. Imports System.Xml
  3.  
  4. Public Class Ini_Xml
  5.         Public Function StrLeerClave(strArchivo as String, strSeccion as String, strClave as String, strValorPorDefecto as String) as String
  6.                 StrLeerClave = strValorPorDefecto
  7.                 Dim doc As New XmlDocument()
  8.                 doc.Load(strArchivo)
  9.                 Dim root As XmlNode = doc.DocumentElement
  10.                 Dim i, j As Integer
  11.                 dim strSeccionActual as string
  12.                 'Despliega el contenido de los nodos hijos
  13.                 If root.HasChildNodes Then
  14.                 ' Exploración de secciones
  15.                         For i = 0 To root.ChildNodes.Count - 1
  16.                                 Dim Secciones As XmlNode = root.ChildNodes(i)
  17.                                 strSeccionActual = Secciones.Name
  18.                                 If strSeccionActual = strSeccion then
  19.                                 ' Si es la sección que están pidiendo en el argumento
  20.                                         If Secciones.HasChildNodes then
  21.                                         ' Exploración de claves
  22.                                                 For j = 0 To Secciones.ChildNodes.Count - 1
  23.                                                         If Secciones.ChildNodes(j).Name = strClave then
  24.                                                                 StrLeerClave = Secciones.ChildNodes(j).InnerText
  25.                                                                 Exit Function
  26.                                                         End If
  27.                                                 Next j
  28.                                         else
  29.                                                 'Secciones no tiene hijos
  30.                                         End if
  31.                                 End If
  32.                         Next i
  33.                 Else
  34.                         'Root no tiene hijos
  35.                 End If
  36.         End Function
  37.  
  38.         Public Function blnEscribirClave(strArchivo as String, strSeccion as String, strClave as String, strValorAEscribir as String) as Boolean
  39.                 ' Esta función escribe en el nodo si ya existe,
  40.                 ' Hace falta implementar que no reciba espacios en blanco, control de errores
  41.                 blnEscribirClave = False
  42.                 Dim doc As New XmlDocument()
  43.                 Try
  44.                         doc.Load(strArchivo)
  45.                 Catch ex as System.Io.FileNotFoundException
  46.                 ' Crear archivo con un solo nodo principal
  47.                         blnCrearArchivo(strArchivo)
  48.                 'Catch ex as System.Xml.XmlException
  49.                 ' Errores de XML
  50.                 Finally
  51.                         doc.Load(strArchivo)
  52.                 End Try
  53.                 Dim root As XmlNode = doc.DocumentElement
  54.                 Dim i, j As Integer
  55.                 Dim strSeccionActual as String
  56.                 'Despliega el contenido de los nodos hijos
  57.                 If root.HasChildNodes Then
  58.                 ' Exploración de secciones
  59.                         For i = 0 To root.ChildNodes.Count - 1
  60.                                 Dim Secciones As XmlNode = root.ChildNodes(i)
  61.                                 strSeccionActual = Secciones.Name                              
  62.                                 If strSeccionActual = strSeccion Then
  63.                                 ' Si es la sección que están pidiendo en el argumento
  64.                                         If Secciones.HasChildNodes Then
  65.                                         ' Exploración de claves
  66.                                                 For j = 0 To Secciones.ChildNodes.Count - 1
  67.                                                         If Secciones.ChildNodes(j).Name = strClave Then
  68.                                                                 Secciones.ChildNodes(j).InnerText = strValorAEscribir
  69.                                                                 doc.Save(strArchivo)
  70.                                                                 blnEscribirClave = True
  71.                                                                 Exit Function
  72.                                                         End If
  73.                                                 Next j
  74.                                                 ' Si pasa por acá y la clave no coincide, cree una nueva clave
  75.                                                 Dim OtraClave As XmlElement = doc.CreateElement(strClave)
  76.                                                 ' Asignar en el texto el Valor a escribir
  77.                                                 OtraClave.InnerText = strValorAEscribir
  78.                                                 ' Añadir el nodo a la sección
  79.                                                 Secciones.AppendChild(OtraClave)
  80.                                                 'Clave no existe, creada
  81.                                                 ' Guardar el documento
  82.                                                 doc.Save(StrArchivo)
  83.                                                 blnEscribirClave = True
  84.                                                 Exit Function
  85.                                         Else
  86.                                         ' Secciones no tiene hijos
  87.                                         ' Si pasa por acá y la clave no coincide, cree una nueva clave
  88.                                                 Dim OtraClave As XmlElement = doc.CreateElement(strClave)
  89.                                                 ' Asignar en el texto el Valor a escribir
  90.                                                 OtraClave.InnerText = strValorAEscribir
  91.                                                 ' Añadir el nodo a la sección
  92.                                                 Secciones.AppendChild(OtraClave)
  93.                                                 'Clave no existe, creada
  94.                                                 ' Guardar el documento
  95.                                                 doc.Save(StrArchivo)
  96.                                                 blnEscribirClave = True
  97.                                                 Exit Function
  98.                                         End if
  99.                                 End if
  100.                         Next i
  101.                         ' Si pasa por acá y la sección no coincide, cree una nueva sección
  102.                         Dim seccion As XmlElement = doc.CreateElement(strSeccion)
  103.                         ' Añadir el nodo al documento
  104.                         root.AppendChild(seccion)
  105.                         ' Crear el elemento de Clave
  106.                         Dim Clave As XmlElement = doc.CreateElement(strClave)
  107.                         ' Asignar en el texto el Valor a escribir
  108.                         Clave.InnerText = strValorAEscribir
  109.                         ' Añadir el nodo a la sección
  110.                         seccion.AppendChild(Clave)
  111.                         ' Guardar el documento
  112.                         doc.Save(StrArchivo)
  113.                         blnEscribirClave = True
  114.                         Exit Function
  115.                 Else
  116.                 ' Root no tiene hijos, crearle un hijo
  117.                         ' Crear el elemento de Sección
  118.                         Dim seccion As XmlElement = doc.CreateElement(strSeccion)
  119.                         ' Añadir el nodo al documento
  120.                         root.AppendChild(seccion)
  121.                         ' Crear el elemento de Clave
  122.                         Dim Clave As XmlElement = doc.CreateElement(strClave)
  123.                         ' Asignar en el texto el Valor a escribir
  124.                         Clave.InnerText = strValorAEscribir
  125.                         ' Añadir el nodo a la sección
  126.                         seccion.AppendChild(Clave)
  127.                         ' Guardar el documento
  128.                         doc.Save(StrArchivo)
  129.                         blnEscribirClave = True
  130.                         Exit Function
  131.                 End If
  132.         End Function
  133.  
  134.         Public Function blnCrearArchivo(strArchivo as String) as Boolean
  135.                 ' Crear el XmlDocument.
  136.                 Dim doc as XmlDocument = new XmlDocument()
  137.                 Dim xmlData as string = "<principal></principal>"
  138.                 doc.Load(new StringReader(xmlData))
  139.                 doc.Save(strArchivo)
  140.         End Function
  141. End Class

Autor: Jhonny D. Cano

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
API para INI
« Respuesta #1 en: Jueves 17 de Junio de 2004, 12:30 »
0

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Anónimo

  • Visitante
Como se utiliza la API de Windows en .NET
« Respuesta #2 en: Jueves 17 de Junio de 2004, 15:46 »
0
Alguién podría explicarme cómo se utiliza la API de Windows en .NET? Gracias de antemano