一种简便实效的配置文件读写方法
_ 声明:我的“文章”只适宜初学者参考。我对概念理解模糊,参考者只参考思路则可。 _
( 怕挨骂,声明在前 )
主要做法:
_ 第一步,将配置信息做一个简单的类。 _
要点:因为要用到序列化,而且是用 ** XmlSerializer ** 来序列化,所以要存到文件的变量信息都要声明为 ** Public ** , 要序列化的类用 **
1<serializable()> ** 修饰。
2
3示例:一个连接数据库的配置信息
4
5' 配置信息
6
7<serializable()> Public Class Item
8
9' 初始默认值
10
11Public ID As Integer = 0
12
13Public Server As String = "(Local)"
14
15Public Database As String = "NorthWind"
16
17Public Tusted As Boolean = True
18
19Public User As String = ""
20
21Public Password As String = ""
22
23End Class
24
25_ 第二步:配置处理的类。 _
26
27说明:这个类是通用的。用到别的配置,你只需修改上面的配置信息类就可以了。它实现了存档和读取的功能,并转化为配置信息对象,操作起来较为方便。 你可以添加内容加密的处理。
28
29<serializable()> Public Class Config
30
31' 默认 ConnectionInfo 的 ID
32
33Public ID As Integer
34
35' 必须是 Public,XmlSerializer 只对 Pulbic 变量作用
36
37Public Items As Item()
38
39Private m_Count As Integer = 0
40
41' 添加配置信息
42
43Public Sub Add( ByVal ConnectionInfo As Item)
44
45If ConnectionInfo Is Nothing Then Exit Sub
46
47If m_Count > 0 Then
48
49If Not Me .ConnectionInfo(ConnectionInfo.ID) Is Nothing Then
50
51MsgBox(ID.ToString & " 已存在 ")
52
53Exit Sub
54
55End If
56
57End If
58
59ReDim Preserve Me .Items(m_Count)
60
61Me .Items(m_Count) = ConnectionInfo
62
63m_Count += 1
64
65End Sub
66
67' 取指定 ID 的配置信息
68
69Public ReadOnly Property ConnectionInfo( ByVal ID As Integer ) As Item
70
71Get
72
73Dim mItem As Item
74
75Dim i As Integer
76
77For i = 0 To m_Count - 1
78
79If Me .Items(i).ID = ID Then
80
81mItem = Me .Items(ID)
82
83Exit For
84
85End If
86
87Next
88
89Return mItem
90
91End Get
92
93End Property
94
95' 序列化并保存到指定文件
96
97Public Sub SaveXmlFile( ByVal FileName As String )
98
99If Me Is Nothing Then Exit Sub
100
101Dim XmlWriter As New System.IO.StreamWriter(FileName, False )
102
103XmlWriter.Write(SerializeClass.GetXML( Me ))
104
105XmlWriter.Close()
106
107End Sub
108
109' 从指定文件读取反序列化转为对象
110
111Public Function LoadXmlFile( ByVal FileName As String ) As Config
112
113Dim XmlReader As New System.IO.StreamReader(FileName, System.Text.Encoding.Default)
114
115Dim mConfig As Config
116
117mConfig = CType (SerializeClass.LoadXML( GetType (Config), XmlReader.ReadToEnd), Config)
118
119XmlReader.Close()
120
121mConfig.m_Count = mConfig.Items.Length
122
123Return mConfig
124
125End Function
126
127End Class
128
129_ 就以上两步就可以了,下面这个类是用来序列化用的。 _
130
131' 这是用 XmlSerializer 序列化对象的类
132
133Public Class SerializeClass
134
135Public Shared Function GetXML( ByVal mObject As Object ) As String
136
137Dim oSerializer As New System.Xml.Serialization.XmlSerializer(mObject.GetType)
138
139Dim oStringWriter As New System.IO.StringWriter
140
141oSerializer.Serialize(oStringWriter, mObject)
142
143Return oStringWriter.ToString
144
145End Function
146
147Public Shared Function LoadXML( ByVal mClass As Type, ByVal XML As String ) As Object
148
149Dim oSerializer As New System.Xml.Serialization.XmlSerializer(mClass)
150
151Dim oStringReader As New System.IO.StringReader(XML)
152
153Return oSerializer.Deserialize(oStringReader)
154
155End Function
156
157End Class
158
159**__ 以下是使用方法示例: _ _ **
160
161** **
162
163' 测试存配置文件
164
165Private Sub TestSaveConfig()
166
167Dim mConfig As Config = New Config
168
169Dim mItem As Item
170
171mItem = New Item
172
173mConfig.Add(mItem)
174
175mItem = New Item
176
177With mItem
178
179.ID = 1
180
181.User = "Master"
182
183.Password = "123456"
184
185.Tusted = False
186
187End With
188
189mConfig.Add(mItem)
190
191mConfig.SaveXmlFile(Application.StartupPath & "\Config.xml")
192
193End Sub
194
195' 测试读配置文件
196
197Private Sub TestLoadConfig()
198
199Dim mConfig As Config = New Config
200
201mConfig = mConfig.LoadXmlFile(Application.StartupPath & "\Config.xml")
202
203' 读取默认值的用户名
204
205MsgBox(mConfig.Items(mConfig.ID).User)
206
207' 不妨修改一下配置
208
209mConfig.ID = 1
210
211mConfig.ConnectionInfo(0).Server = "Server"
212
213mConfig.ConnectionInfo(1).Database = "Master"
214
215' 再存盘
216
217mConfig.SaveXmlFile(Application.StartupPath & "\Config.xml")
218
219End Sub</serializable()></serializable()></serializable()>