2017-09-02 71 views
0

我的VS2013 VB应用程序当前将设置保存到注册表中,并且它已经发展到了困扰着我的地步。所以我想将设置(字符串)保存到文件。奖励是他们可以在网络上并被多个用户使用。可能有数百甚至数千行。什么是首选格式?旧的INI,CSV,XML?就我所知,这种情况下Settings文件似乎不是一个好选择。最有效的保存自定义设置的方法

+1

*设置文件不会出现是一个好在这种情况下选项*为什么? – Plutonix

+0

不知道将要保存的内容的全部范围是什么,它们在本地系统上,而不在网络上。 – Terabithia

+0

我不知道第一部分是什么意思。目前还没有明确的问题需要解决,但是...... a)INI文件至少从2003年开始已经过时。 b)对*用户*设置使用* system *注册表一直是一个糟糕的主意。 c)现在可以将设置长时间设置为本地或漫游d)您也可以使用自定义设置提供程序,以便仍然可以使用IDE UI,但可以随意使用它。作为最后的手段,像你接受的答案 – Plutonix

回答

0

我强烈建议创建一个类的对象并将序列化用于.NET应用程序的XML。它很容易实现,完全支持,您可以将设置从一台计算机导入和导出到另一台计算机。您甚至可以设置您的应用程序以准备来自网络的设置。此外,它将使未来的编程/升级更容易。

我在这里列出一个工作示例(测试)。该代码自2012年起开始使用,并且适用于企业级应用程序。

注意:我只为演示添加了一个“设置项目”,以便您自行添加。

第一:设置或选项类:

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 
+2

你为什么在变量名前加上下划线?这违背了VB.NET的命名约定(特别是'Public'!)。此外,而不是'Dim _StreamWriter ...'和'Dim _FileStream ...'把它们放在[**'使用'块**](https://docs.microsoft.com/en-us/dotnet/visual - 基本/语言参考/语句/使用语句)。 –

+0

有效评论,Thanx! –

相关问题