如果程序需要多个相同类型的文件,比如10个设置预设,那么将这些信息存储在文件中的典型方式是什么?
到目前为止,我一直在为每个预设创建一个新文件,所以我有Preset1.set, Preset2.set, Preset3.set
等。要访问它们,我将遍历目录中的所有文件并阅读{{1}的文件。 } extension。
我现在意识到,将所有预设存储在名为.set
的文件中,然后将所有预设配置写入具有一些分隔字符的同一文件,可能更有效率和传统,例如{{1 }}
这些方法有区别吗?一个人比另一个好吗?
答案 0 :(得分:1)
序列化意味着永远不必担心分离字符或将文本解析回有意义的数据。一个保存数据的简单类
<Serializable>
Public Class Preset
Public Property Name As String
Public Property ForeColor As Color
Public Property BackColor As Color
Public Property ThisItem As Integer
Public Property ThatItem As Integer
Public Property LastItem As String
Public Sub New()
End Sub
End Class
' elsewhere, a List of these things, so we can have many
Private Presets As New List(Of Preset)
添加一些假数据:
' file path/name:
PresetsFileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"Company", "Product", "presets.xml")
Dim p As Preset
p = New Preset With {.Name = "ziggy"}
Presets.Add(p)
' quick way, no temp var
Presets.Add(New Preset With {.Name = "User Defined"})
Presets.Add(New Preset With {.Name = "Default"})
Presets.Add(New Preset With {.Name = "Custom"})
将整个Preset
个对象序列化为文件(保存):
Using fs As New FileStream(PresetsFileName, FileMode.OpenOrCreate)
Dim Xml As New XmlSerializer(GetType(List(Of Preset)))
Xml.Serialize(fs, Presets)
End Using
装载:
' ToDo: check if File.Exists
Using fs As New FileStream(PresetsFileName, FileMode.Open)
Dim Xml As New XmlSerializer(GetType(List(Of Preset)))
Presets = CType(Xml.Deserialize(fs), List(Of Preset))
End Using
' show none were lost:
For Each ps As Preset In Presets
Console.WriteLine(ps.Name)
Next
输出:
齐格
用户定义的 默认
自定义
就是这样!少于5行代码保存或加载整个对象列表。
<Serializable>
属性或其他属性。Sub New
,不带参数)。Save
和Load
的方法可以在Shared
类中定义为Preset
方法。特别是如果有一个集合类(不只是List
)。