.net 是否将多个应用程序数据项保存到一个或多个文件?
如果一个程序需要多个相同类型的文件,比如10个设置预设,那么在文件中存储这些信息的典型方式是什么 到目前为止,我一直在为每个预设创建一个新文件,因此我有.net 是否将多个应用程序数据项保存到一个或多个文件?,.net,vb.net,file,.net,Vb.net,File,如果一个程序需要多个相同类型的文件,比如10个设置预设,那么在文件中存储这些信息的典型方式是什么 到目前为止,我一直在为每个预设创建一个新文件,因此我有Preset1.set、Preset2.set、Preset3.set等。要访问它们,我将遍历目录中的所有文件,并读取扩展名为.set的文件 我现在意识到,将所有预设存储在一个名为Preset.set的文件中,然后使用一些分隔字符将所有预设配置写入同一个文件,例如~~,可能会更有效、更传统 这些方法有区别吗?一个比另一个好吗?序列化意味着永远不必
Preset1.set、Preset2.set、Preset3.set
等。要访问它们,我将遍历目录中的所有文件,并读取扩展名为.set
的文件
我现在意识到,将所有预设存储在一个名为Preset.set
的文件中,然后使用一些分隔字符将所有预设配置写入同一个文件,例如~~
,可能会更有效、更传统
这些方法有区别吗?一个比另一个好吗?序列化意味着永远不必担心分隔字符或将文本解析回有意义的数据。用于保存数据的简单类
<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)
将整套预设
对象序列化到文件(保存):
装载:
' 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行代码中保存或加载整个对象列表
属性或其他属性subnew
,不带参数)保存
和加载
的方法可以定义为预设
类中的共享
方法。如果有一个集合类(而不仅仅是列表
),情况尤其如此我会一次从一个文件加载应用程序数据,然后只使用激活的那个文件。至于文件布局,我会使用序列化。请注意,您可能希望添加一个语言或技术标签,以便能够获得更具体的答案。我认为一个文件是最好的选择。我只需要为我正在寻找的条目实现对文件的解析,使用某种分隔字符应该一点也不坏。我对序列化的概念很熟悉,但现在来看,我相信我是在手动操作。我将数据写入一个文件,然后将其读回,并在需要时将其转换回对象。有更好的方法吗?谢谢你的回答。哇,很好的解释。非常感谢。谢谢嘿,如果你不介意的话,我还有另一个问题,关于用对象(作为字段)序列化对象。如果您有时间,我们将不胜感激。
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