2017-09-02 73 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! –

相關問題