VB.Net Tutorial/Class Module/Structure Serialization

Материал из VB Эксперт
Перейти к: навигация, поиск

RandomAccess file for storing the custom objects

<source lang="vbnet">Imports System.IO public class Test

  public Shared Sub Main
       Dim emp As New Employee
       Dim file_num As Integer = FreeFile()
       FileOpen(file_num, "MYFILE.DAT", OpenMode.Random, _
            OpenAccess.ReadWrite, OpenShare.Shared, _
            Len(emp))
       FilePut(file_num, New Employee(1, "A", "A"))
       FilePut(file_num, New Employee(2, "B", "B"))
       FilePut(file_num, New Employee(3, "C", "C"))
       Dim obj As ValueType = DirectCast(emp, ValueType)
       For Each i As Integer In New Integer() {3, 1,  2}
           FileGet(file_num, obj, i)
           emp = DirectCast(obj, Employee)
           Console.WriteLine(emp.ToString())
       Next i
       FileClose(file_num)
  End Sub

End class

   Public Structure Employee
       Public ID As Integer
       <VBFixedString(15)> Public FirstName As String
       <VBFixedString(15)> Public LastName As String
       Public Sub New(ByVal new_id As Integer, ByVal first_name As String, _
        ByVal last_name As String)
           ID = new_id
           FirstName = first_name
           LastName = last_name
       End Sub
       Public Overrides Function ToString() As String
           Return ID & ": " & FirstName & " " & LastName
       End Function
   End Structure</source>
3: C               C
1: A               A
2: B               B

Read Record (Structure) from binary file

<source lang="vbnet">Imports System.IO Structure Product

   Dim ProdID As String
   Dim ProdDescription As String
   Dim ListPrice As Single
   Dim Available As Boolean
   Dim MinStock As Integer

End Structure

public class Test

  public Shared Sub Main
       Dim objBR As BinaryReader
       Dim objFS As FileStream
       Dim objProduct As New Product
       objFS = New FileStream("Records.bin", FileMode.Open, FileAccess.Read)
       objBR = New BinaryReader(objFS)
       objBR.BaseStream.Seek(0, SeekOrigin.Begin)
       While objFS.Position < objFS.Length
           objProduct = Nothing
           With objProduct
               .ProdID = objBR.ReadString
               .ProdDescription = objBR.ReadString
               .ListPrice = objBR.ReadSingle
               .Available = objBR.ReadBoolean
               .MinStock = objBR.ReadInt32
           End With
           ShowRecord(objProduct)
       End While
       objBR.Close()
       objFS.Close()
  End Sub
   Private Shared Sub ShowRecord(ByVal objRecord As Product)
           Console.WriteLine(objRecord.ProdDescription)
           Console.WriteLine(objRecord.ListPrice.ToString)
           Console.WriteLine(objRecord.Available)
           Console.WriteLine(objRecord.MinStock.ToString)
   End Sub

End class</source>

Save Structure to a binary file

<source lang="vbnet">Imports System.IO Structure Product

   Dim ProdID As String
   Dim ProdDescription As String
   Dim ListPrice As Single
   Dim Available As Boolean
   Dim MinStock As Integer

End Structure

public class Test

  public Shared Sub Main
       Dim objBW As BinaryWriter
       Dim objFS As FileStream
       Dim objProduct As Product
       objFS = New FileStream("Records.bin", FileMode.OpenOrCreate, FileAccess.Write)
       objBW = New BinaryWriter(objFS)
       objBW.BaseStream.Seek(0, SeekOrigin.Begin)
       objProduct = New Product
       With objProduct
           .ProdID = "1"
           .ProdDescription = "AAA"
           .ListPrice = 4.99
           .Available = True
           .MinStock = 40
       End With
       SaveRecord(objBW, objProduct)
       objProduct = New Product
       With objProduct
           .ProdID = "2"
           .ProdDescription = "BBB"
           .ListPrice = 0.99
           .Available = True
           .MinStock = 1000
       End With
       SaveRecord(objBW, objProduct)
       objBW.Close()
       objFS.Close()
  End Sub
   Private Shared Sub SaveRecord(ByVal objWriter As BinaryWriter, ByVal objRecord As Product)
       With objWriter
           .Write(objRecord.ProdID)
           .Write(objRecord.ProdDescription)
           .Write(objRecord.ListPrice)
           .Write(objRecord.Available)
           .Write(objRecord.MinStock)
       End With
   End Sub   

End class</source>