您的位置:首页 > 其它

一种简便实效的配置文件读写方法

2006-03-15 09:39 597 查看
第一步,将配置信息做一个简单的类。
要点:因为要用到序列化,而且是用XmlSerializer来序列化,所以要存到文件的变量信息都要声明为Public,要序列化的类用<Serializable()>修饰。
示例:一个连接数据库的配置信息
[align=left] [/align]
[align=left]'配置信息[/align]
[align=left]<Serializable()> Public Class Item[/align]
[align=left] '初始默认值[/align]
[align=left] Public ID As Integer = 0[/align]
[align=left] Public Server As String = "(Local)"[/align]
[align=left] Public Database As String = "NorthWind"[/align]
[align=left] Public Tusted As Boolean = True[/align]
[align=left] Public User As String = ""[/align]
[align=left] Public Password As String = ""[/align]
[align=left]End Class[/align]

第二步:配置处理的类。
说明:这个类是通用的。用到别的配置,你只需修改上面的配置信息类就可以了。它实现了存档和读取的功能,并转化为配置信息对象,操作起来较为方便。你可以添加内容加密的处理。

[align=left]<Serializable()> Public Class Config[/align]
[align=left] '默认ConnectionInfo的ID[/align]
[align=left] Public ID As Integer[/align]
[align=left] '必须是Public,XmlSerializer只对Pulbic变量作用[/align]
[align=left] Public Items As Item()[/align]
[align=left] Private m_Count As Integer = 0[/align]
[align=left] [/align]
[align=left] '添加配置信息[/align]
[align=left] Public Sub Add(ByVal ConnectionInfo As Item)[/align]
[align=left] If ConnectionInfo Is Nothing Then Exit Sub[/align]
[align=left] If m_Count > 0 Then[/align]
[align=left] If Not Me.ConnectionInfo(ConnectionInfo.ID) Is Nothing Then[/align]
[align=left] MsgBox(ID.ToString & "已存在")[/align]
[align=left] Exit Sub[/align]
[align=left] End If[/align]
[align=left] End If[/align]
[align=left] ReDim Preserve Me.Items(m_Count)[/align]
[align=left] Me.Items(m_Count) = ConnectionInfo[/align]
[align=left] m_Count += 1[/align]
[align=left] End Sub[/align]
[align=left] '取指定ID的配置信息[/align]
[align=left] Public ReadOnly Property ConnectionInfo(ByVal ID As Integer) As Item[/align]
[align=left] Get[/align]
[align=left] Dim mItem As Item[/align]
[align=left] Dim i As Integer[/align]
[align=left] For i = 0 To m_Count - 1[/align]
[align=left] If Me.Items(i).ID = ID Then[/align]
[align=left] mItem = Me.Items(ID)[/align]
[align=left] Exit For[/align]
[align=left] End If[/align]
[align=left] Next[/align]
[align=left] Return mItem[/align]
[align=left] End Get[/align]
[align=left] End Property[/align]
[align=left] '序列化并保存到指定文件[/align]
[align=left] Public Sub SaveXmlFile(ByVal FileName As String)[/align]
[align=left] If Me Is Nothing Then Exit Sub[/align]
[align=left] Dim XmlWriter As New System.IO.StreamWriter(FileName, False)[/align]
[align=left] XmlWriter.Write(SerializeClass.GetXML(Me))[/align]
[align=left] XmlWriter.Close()[/align]
[align=left] End Sub[/align]
[align=left] '从指定文件读取反序列化转为对象[/align]
[align=left] Public Function LoadXmlFile(ByVal FileName As String) As Config[/align]
[align=left] Dim XmlReader As New System.IO.StreamReader(FileName, System.Text.Encoding.Default)[/align]
[align=left] Dim mConfig As Config[/align]
[align=left] mConfig = CType(SerializeClass.LoadXML(GetType(Config), XmlReader.ReadToEnd), Config)[/align]
[align=left] XmlReader.Close()[/align]
[align=left] mConfig.m_Count = mConfig.Items.Length[/align]
[align=left] Return mConfig[/align]
[align=left] End Function[/align]
[align=left]End Class[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]就以上两步就可以了,下面这个类是用来序列化用的。[/align]
[align=left] [/align]
[align=left]'这是用XmlSerializer序列化对象的类[/align]
[align=left]Public Class SerializeClass[/align]
[align=left] Public Shared Function GetXML(ByVal mObject As Object) As String[/align]
[align=left] Dim oSerializer As New System.Xml.Serialization.XmlSerializer(mObject.GetType)[/align]
[align=left] Dim oStringWriter As New System.IO.StringWriter[/align]
[align=left] oSerializer.Serialize(oStringWriter, mObject)[/align]
[align=left] Return oStringWriter.ToString[/align]
[align=left] End Function[/align]
[align=left] Public Shared Function LoadXML(ByVal mClass As Type, ByVal XML As String) As Object[/align]
[align=left] Dim oSerializer As New System.Xml.Serialization.XmlSerializer(mClass)[/align]
[align=left] Dim oStringReader As New System.IO.StringReader(XML)[/align]
[align=left] Return oSerializer.Deserialize(oStringReader)[/align]
[align=left] End Function[/align]
End Class

以下是使用方法示例:

[align=left] '测试存配置文件[/align]
[align=left] Private Sub TestSaveConfig()[/align]
[align=left] Dim mConfig As Config = New Config[/align]
[align=left] Dim mItem As Item[/align]
[align=left] mItem = New Item[/align]
[align=left] mConfig.Add(mItem)[/align]
[align=left] [/align]
[align=left] mItem = New Item[/align]
[align=left] With mItem[/align]
[align=left] .ID = 1[/align]
[align=left] .User = "Master"[/align]
[align=left] .Password = "123456"[/align]
[align=left] .Tusted = False[/align]
[align=left] End With[/align]
[align=left] mConfig.Add(mItem)[/align]
[align=left] [/align]
[align=left] mConfig.SaveXmlFile(Application.StartupPath & "/Config.xml")[/align]
[align=left]End Sub[/align]
[align=left] [/align]
[align=left] '测试读配置文件[/align]
[align=left] Private Sub TestLoadConfig()[/align]
[align=left] Dim mConfig As Config = New Config[/align]
[align=left] mConfig = mConfig.LoadXmlFile(Application.StartupPath & "/Config.xml")[/align]
[align=left] '读取默认值的用户名[/align]
[align=left] MsgBox(mConfig.Items(mConfig.ID).User)[/align]
[align=left] '不妨修改一下配置[/align]
[align=left] mConfig.ID = 1[/align]
[align=left] mConfig.ConnectionInfo(0).Server = "Server"[/align]
[align=left] mConfig.ConnectionInfo(1).Database = "Master"[/align]
[align=left] '再存盘[/align]
[align=left] mConfig.SaveXmlFile(Application.StartupPath & "/Config.xml")[/align]
End Sub
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: