Каков наилучший способ сохранить массив структур в VB.NET? - PullRequest
1 голос
/ 31 мая 2011

У меня есть 2 структуры

Public Structure One                    
        Public ItemOne As String
        Public ItemTwo As Integer
    End Structure

    Public Structure Two                   
        Public ItemOne As String
        Public ItemTwo As Integer
        Public ItemThree As Integer
        Public ItemFour As Integer
        Public ItemFive As Integer
    End Structure

Public TestOne(0) as One
Public TestTwo(19) as Two

Используя метод FileOpen, FilePut и FileClose, я получаю ошибку: (В качестве примера приведен только соответствующий код)

    Public Sub WriteOne()
                FileOpen(1, "One.dat", OpenMode.Random, OpenAccess.Write)
                FilePut(1, TestOne)
                FileClose(1)
    End Sub

    Public Sub ReadOne()
                FileOpen(1, "One.dat", OpenMode.Random, OpenAccess.Read)
                FileGet(1, TestOne)
                FileClose(1)
    End Sub

    Public Sub WriteTwo()
                FileOpen(1, "Two.dat", OpenMode.Random, OpenAccess.Write)
                FilePut(1, TestTwo)
                FileClose(1)
    End Sub

    Public Sub ReadTwo()
                FileOpen(1, "Two.dat", OpenMode.Random, OpenAccess.Read)
                FileGet(1, TestTwo)
                FileClose(1)
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ReadOne()
        ReadTwo()
        Label1.Text = Cstr(TestOne(0).ItemTwo)
        Label2.Text = Cstr(TestTwo(4).ItemFour)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TestOne(0).ItemTwo = 9
        TestTwo(4).ItemFour = 78
        WriteOne()
        WriteTwo()
    End Sub

Результаты в необработанном исключении.Длина плохой записи.и затем, если я закрою его и снова открою, я получу ошибку «Невозможно прочитать за пределами конца потока».

Так, каков наилучший способ сохранить массив структур?Бинарный читатель / писатель?и почему этот способ не работает (даже если он получен из VB6)

Ответы [ 2 ]

5 голосов
/ 31 мая 2011

Вы можете использовать сериализацию BinaryFormatter и сохранить его в поток файлов с помощью Serialize, а затем прочитать его с помощью Deserialize. Вам нужно будет добавить <Serializable()> в ваши объявления структуры.

<Serializable()> Public Structure Two

...

Dim bf As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim fStream As New FileStream(filename, FileMode.OpenOrCreate)

bf.Serialize(fStream, TestTwo) ' write to file
fStream.Position = 0 ' reset stream pointer
TestTwo = bf.Deserialize(fStream) ' read from file
2 голосов
/ 31 мая 2011

Я думаю, что лучший способ сохранить массив структур - это использовать сериализацию.Вы можете использовать System.Runtime.Serialization.Formatters.Binary.BinaryFormatter, System.Xml.Serialization.XmlSerializer или System.Runtime.Serialization.Formatters.Soap.SoapFormatter для сериализации массива.

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