在联系人管理器程序中,我一直在为每个联系人存储CSV文件中的数据,并想要一种将这些数据压缩成单个文件的方法。
我曾尝试在visual studio工具箱和模板类中使用数据输入工具,但我从未弄清楚如何使用它们。特别方便的是,如果我可以以某种方式存储泛型类实例,而不是必须提供它的字符串表示,然后解析它。
我还需要弄清楚如何告诉程序在打开文件时该怎么做(我在属性中注意到如何将文件类型与程序关联但是我不知道如何告诉它什么当它打开时要做。)
答案 0 :(得分:1)
恕我直言,切换到sqlite。您将能够更快地查询,压缩它,然后使用csv文件。
答案 1 :(得分:-1)
发现这篇关于序列化的文章很有效!
http://www.vbdotnetheaven.com/UploadFile/Nimusoft/Serialization105022008052559AM/Serialization1.aspx
编辑:想想我应该发布更多内容。我有一个类IOwner,这个类的列表包含我的所有数据库。所以我在这个类中添加了序列化标记,然后引用了其他标记,然后将这些属性替换为文章中显示的那些:
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.IO
Namespace BinarySerialization
<Serializable()> _
Public Class IFile
Implements ISerializable
Public Contacts As List(Of IOwner)
Public Self As IOwner
Public Cars As List(Of Vehicle)
Public path As String
Public Sub New()
End Sub
Public Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext)
Data.Self = info.GetValue("Self", GetType(IOwner))
Data.Contacts = info.GetValue("Contacts", GetType(List(Of IOwner)))
Data.Cars = info.GetValue("Cars", GetType(List(Of Vehicle)))
End Sub
Public Sub WriteFile()
Dim s As New FileStream(path, FileMode.Create, FileAccess.ReadWrite)
Dim B As New BinaryFormatter()
B.Serialize(s, Me)
s.Close()
End Sub
Public Function ReadFile() As IFile
Dim Fs As New FileStream(path, FileMode.Open, FileAccess.Read)
Dim F As New BinaryFormatter()
Dim s1 As IFile = DirectCast(F.Deserialize(Fs), IFile)
Fs.Close()
Return s1
End Function
#Region "ISerializable Members"
Public Sub GetObjectData(ByVal info As SerializationInfo, ByVal context As StreamingContext) Implements ISerializable.GetObjectData
info.AddValue("Self", Data.Self)
info.AddValue("Contacts", Data.Contacts)
info.AddValue("Cars", Data.Cars)
End Sub
#End Region
End Class
End Namespace
2016年更新
对于可能发生变化的复杂结构,不建议使用二进制序列化。使用数据库存储方法(如SQLite
和使用ODB(对象数据库模型))更为可取。