Leggere e scrivere sul file .config

Il livello di utenza a cui si riferisce questo codice è sicuramente "Beginner" (quantomeno su .NET), ma a me è servito parecchio, percui se a qualcuno dovesse servire...

Delle righe postate praticamente nulla, o quasi, è farina del mio sacco(!), ho solo messo insieme, forse addirittura un annetto fa, gli esempi di due articoli (chiedo scusa agli autori, ma proprio non ricordo quali fossero...) presenti in UGIdotNET in modo da poter leggere e scrivere sul file .config dell'applicazione, visto che di base la classe AppSettings prevede solo la lettura dei valori già presenti.

Inoltre risulta particolarmente comodo il fatto che:
a) se la Key non esiste non viene sollevata un eccezione e si può pertanto specificare alla funzione stessa un valore di default per questo caso;
b) se in una revisione della nostra applicazione inseriamo nuovi parametri, possiamo semplicemente inserirli a run-time senza dover editare il file.

Dimenticavo... attualmente non sono gestite eventuali eccezioni, "lasciandole" alla funzione chiamante. Inoltre, così com'è la classe attualmente presuppone l'esistenza del tag appSettings nel file.config, pena un eccenzioncella... (tradotto: volendo e avendo tempo, da migliorare ce n'è eccome!)

Comunque ecco la classe coi sue metodi statici, sono come al solito grato a chiunque vorrà migliorare, criticare (costruttivamente) o dire la sua su quanto postato!

Public NotInheritable Class EditAppConfig

Public Shared Function GetValue(ByVal key_CaseSensitive As String) As String

Dim str As String = ""

Dim doc As New Xml.XmlDocument

doc.Load(String.Format("{0}.config", Application.ExecutablePath))

Dim NodeKey As String = "//appSettings/add[@key='" + key_CaseSensitive + "']/@value"

If Not doc.DocumentElement.SelectSingleNode(NodeKey) Is Nothing Then

str = doc.DocumentElement.SelectSingleNode(NodeKey).Value

End If

Return str

End Function

Public Shared Function GetValue(ByVal key_CaseSensitive As String, ByVal defaultValue As String) As String

Dim str As String = defaultValue

Dim doc As New Xml.XmlDocument

doc.Load(String.Format("{0}.config", Application.ExecutablePath))

Dim NodeKey As String = "//appSettings/add[@key='" + key_CaseSensitive + "']/@value"

If Not doc.DocumentElement.SelectSingleNode(NodeKey) Is Nothing Then

str = doc.DocumentElement.SelectSingleNode(NodeKey).Value

End If

Return str

End Function

Public Shared Sub SetValue(ByVal key_CaseSensitive As String, ByVal keyValue As String)

Dim doc As New Xml.XmlDocument

doc.Load(String.Format("{0}.config", Application.ExecutablePath))

Dim nodeKey As String = "//appSettings/add[@key='" + key_CaseSensitive + "']/@value"

If Not doc.DocumentElement.SelectSingleNode(nodeKey) Is Nothing Then

doc.DocumentElement.SelectSingleNode(nodeKey).Value = keyValue

Else

Dim addElement As Xml.XmlElement = doc.CreateElement("add")

Dim attrkey As Xml.XmlAttribute = doc.CreateAttribute("key")

attrkey.Value = key_CaseSensitive

Dim attrvalue As Xml.XmlAttribute = doc.CreateAttribute("value")

attrvalue.Value = keyValue

addElement.Attributes.Append(attrkey)

addElement.Attributes.Append(attrvalue)

doc.DocumentElement.SelectSingleNode("//appSettings").AppendChild(addElement)

End If

doc.Save(String.Format("{0}.config", Application.ExecutablePath))

End Sub

End Class

Print | posted @ lunedì 6 dicembre 2004 14:25

Comments have been closed on this topic.