保存自定义设置的最有效方法
Most efficent way to save custom settings
我的 VS2013 VB 应用程序当前将设置保存到注册表中,它已经发展到让我感到困扰的地步。所以我想将设置(字符串)保存到文件中。一个好处是它们可以在网络上被多个用户使用。可能有数百行,甚至数千行。首选格式是什么?旧的 INI,CSV,XML?据我所知,在这种情况下,设置文件似乎不是一个好的选择。
我强烈建议为 .NET 应用程序创建 class 的对象并使用序列化到 XML。它易于实施,得到全面支持,您可以将设置从一台计算机导入和导出到另一台计算机。您甚至可以将您的应用程序设置为准备好来自网络的设置。此外,它将使未来的编程/升级更加容易。
我在这里列出了一个工作示例(已测试)。该代码自 2012 年开始使用,完美适用于企业级应用程序。
注意:我只包含一个用于演示的“设置项”,因此您可以添加自己的。
首先:设置或选项Class:
Imports System.Xml.Serialization
Imports System.IO
<Serializable()> _
Public Class Options
Public KEYS_USE_LISTS As Boolean
Public Sub New()
KEYS_USE_LISTS = True
End Sub
#Region "Methods"
Public Sub Save(ByVal Path As String)
Try
Dim _XMLSerilizer As New XmlSerializer(GetType(Options))
Dim _StreamWriter As New StreamWriter(Path)
_XMLSerilizer.Serialize(_StreamWriter, Me)
_StreamWriter.Close()
Catch ex As Exception
MsgBox("Error saving database setting." & vbCrLf & "Internal Error: " & ex.Message)
End Try
End Sub
Public Function DoLoad(ByVal Path As String) As Options
Dim _Opt As New Options
Try
If IO.File.Exists(Path) Then
Dim _XMLSerilizer As New XmlSerializer(GetType(Options))
Dim _FileStream As New FileStream(Path, FileMode.Open)
_Opt = DirectCast(_XMLSerilizer.Deserialize(_FileStream), Options)
_FileStream.Close()
End If
Catch ex As Exception
MsgBox("Error loading database setting." & vbCrLf & "Internal Error: " & ex.Message)
End Try
Return _Opt
End Function
#End Region
End Class
第二种:通过界面使用(例如WinForms)
Public Class frmOptions
Public _options As New Options
Private Sub frmOptions_Load(sender As Object, e As EventArgs) Handles MyBase.Load
If IO.File.Exists(Application.StartupPath & "/_Options.opt") Then
_options = _options.DoLoad(Application.StartupPath & "/_Options.opt")
End If
chkUseList.Checked = _options.KEYS_USE_LISTS
End Sub
Private Sub btnOk_Click(sender As Object, e As EventArgs) Handles btnOk.Click
If IO.File.Exists(Application.StartupPath & "/_Options.opt") Then
_options = _options.DoLoad(Application.StartupPath & "/_Options.opt")
End If
_options.KEYS_USE_LISTS = chkUseList.Checked
_options.Save(Application.StartupPath & "/_Options.opt")
Me.DialogResult = Windows.Forms.DialogResult.OK
Me.Close()
End Sub
End Class
我的 VS2013 VB 应用程序当前将设置保存到注册表中,它已经发展到让我感到困扰的地步。所以我想将设置(字符串)保存到文件中。一个好处是它们可以在网络上被多个用户使用。可能有数百行,甚至数千行。首选格式是什么?旧的 INI,CSV,XML?据我所知,在这种情况下,设置文件似乎不是一个好的选择。
我强烈建议为 .NET 应用程序创建 class 的对象并使用序列化到 XML。它易于实施,得到全面支持,您可以将设置从一台计算机导入和导出到另一台计算机。您甚至可以将您的应用程序设置为准备好来自网络的设置。此外,它将使未来的编程/升级更加容易。
我在这里列出了一个工作示例(已测试)。该代码自 2012 年开始使用,完美适用于企业级应用程序。
注意:我只包含一个用于演示的“设置项”,因此您可以添加自己的。
首先:设置或选项Class:
Imports System.Xml.Serialization
Imports System.IO
<Serializable()> _
Public Class Options
Public KEYS_USE_LISTS As Boolean
Public Sub New()
KEYS_USE_LISTS = True
End Sub
#Region "Methods"
Public Sub Save(ByVal Path As String)
Try
Dim _XMLSerilizer As New XmlSerializer(GetType(Options))
Dim _StreamWriter As New StreamWriter(Path)
_XMLSerilizer.Serialize(_StreamWriter, Me)
_StreamWriter.Close()
Catch ex As Exception
MsgBox("Error saving database setting." & vbCrLf & "Internal Error: " & ex.Message)
End Try
End Sub
Public Function DoLoad(ByVal Path As String) As Options
Dim _Opt As New Options
Try
If IO.File.Exists(Path) Then
Dim _XMLSerilizer As New XmlSerializer(GetType(Options))
Dim _FileStream As New FileStream(Path, FileMode.Open)
_Opt = DirectCast(_XMLSerilizer.Deserialize(_FileStream), Options)
_FileStream.Close()
End If
Catch ex As Exception
MsgBox("Error loading database setting." & vbCrLf & "Internal Error: " & ex.Message)
End Try
Return _Opt
End Function
#End Region
End Class
第二种:通过界面使用(例如WinForms)
Public Class frmOptions
Public _options As New Options
Private Sub frmOptions_Load(sender As Object, e As EventArgs) Handles MyBase.Load
If IO.File.Exists(Application.StartupPath & "/_Options.opt") Then
_options = _options.DoLoad(Application.StartupPath & "/_Options.opt")
End If
chkUseList.Checked = _options.KEYS_USE_LISTS
End Sub
Private Sub btnOk_Click(sender As Object, e As EventArgs) Handles btnOk.Click
If IO.File.Exists(Application.StartupPath & "/_Options.opt") Then
_options = _options.DoLoad(Application.StartupPath & "/_Options.opt")
End If
_options.KEYS_USE_LISTS = chkUseList.Checked
_options.Save(Application.StartupPath & "/_Options.opt")
Me.DialogResult = Windows.Forms.DialogResult.OK
Me.Close()
End Sub
End Class