Сжатие базы данных в один файл? - PullRequest
0 голосов
/ 04 июня 2010

В программе диспетчера контактов я хранил данные в файлах CSV для каждого контакта и хотел бы сжать эти данные в один файл.

Я пытался использовать инструменты ввода данных в наборе инструментов Visual Studio и в классе шаблонов, хотя я так и не понял, как их использовать. Что было бы особенно удобно, так это если бы я мог как-то сохранить экземпляр общего класса, а не придумывать его строковое представление, а затем анализировать его.

Мне также нужно выяснить, как сказать программе, что делать, когда файл открыт (я заметил в свойствах, как связать тип файла с программой, хотя я не уверен, как это сказать делать, когда он открыт).

Ответы [ 2 ]

1 голос
/ 04 июня 2010

ИМХО, переключитесь на sqlite . Вы сможете быстрее выполнять запросы, сжимать их и многое другое, чем работать с CSV-файлом.

0 голосов
/ 09 июня 2010

Нашел эту статью о сериализации, и она работает очень хорошо!

http://www.vbdotnetheaven.com/UploadFile/Nimusoft/Serialization105022008052559AM/Serialization1.aspx

edit: понял, что я, вероятно, должен опубликовать больше. У меня есть класс 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 (объектную модель базы данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...