Reading and writing multidimensional arrays to a file in VB.NET

I have the following array:
   Private Structure ObjData
      Dim Image As image
      Dim Path As String
      Dim Name As String
   End Structure
   Dim GoData(2, 8, 7) As ObjData
I nead an easy method to store and retrieve this data within my program.
Also can I append this data to the program itself?
hlominacAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

 
Bob LearnedCommented:
Where are you looking to store the structure?  Database?  File?

Bob
0
 
hlominacAuthor Commented:
File -- I haven't been using databases.  I do not know what form to use if I can append it to the execution file.
0
 
Bob LearnedCommented:
You can embed readonly files within an executable, but not files that you need to update.  What are you trying to achieve by embedding the data within the executable?

Bob
0
Cloud Class® Course: Microsoft Windows 7 Basic

This introductory course to Windows 7 environment will teach you about working with the Windows operating system. You will learn about basic functions including start menu; the desktop; managing files, folders, and libraries.

 
Fernando SotoRetiredCommented:
Hi hlominac;

If you want to serialize the object to a disk file and be able to read it back into an object of ObjData you can follow the sample code attached.


    Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click
 
        Dim img As Image = Image.FromFile("Dice.gif")
        Dim GoData(2, 8, 7) As ObjData
        Dim obj1 As New ObjData
        obj1.Image = img
        obj1.Path = "C:\Temp"
        obj1.Name = "Dice0"
        GoData(0, 0, 0) = obj1
        obj1 = New ObjData
        obj1.Image = img
        obj1.Path = "C:\Temp"
        obj1.Name = "Dice1"
        GoData(0, 1, 0) = obj1
        obj1 = New ObjData
        obj1.Image = img
        obj1.Path = "C:\Temp"
        obj1.Name = "Dice2"
        GoData(0, 1, 1) = obj1
        obj1 = New ObjData
        obj1.Image = img
        obj1.Path = "C:\Temp"
        obj1.Name = "Dice3"
        GoData(0, 1, 2) = obj1
        obj1 = New ObjData
        obj1.Image = img
        obj1.Path = "C:\Temp"
        obj1.Name = "Dice4"
        GoData(1, 1, 3) = obj1
        obj1 = New ObjData
        obj1.Image = img
        obj1.Path = "C:\Temp"
        obj1.Name = "Dice5"
        GoData(1, 2, 5) = obj1
 
        Dim fs As New FileStream("C:\Temp\SerialObjData.bin", FileMode.Create)
        Dim bf As New BinaryFormatter
        bf.Serialize(fs, GoData)
        fs.Flush()
        fs.Close()
 
        Console.WriteLine("Hello")
 
    End Sub
 
    Dim DeSerialObjData As ObjData(,,)
 
    Private Sub Button2_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button2.Click
 
        Dim fs2 As New FileStream("C:\Temp\SerialObjData.bin", FileMode.Open)
        Dim bf2 As New BinaryFormatter
        DeSerialObjData = DirectCast(bf2.Deserialize(fs2), ObjData(,,))
        fs2.Close()
 
        PictureBox1.Image = DeSerialObjData(0, 0, 0).Image
 
    End Sub
End Class
 
<Serializable()> _
Public Class ObjData
    Public Image As Image
    Public Path As String
    Public Name As String
End Class

Open in new window

0

Experts Exchange Solution brought to you by ConnectWise

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
 
Fernando SotoRetiredCommented:
Hi hlominac;

I also changed your structure to a class. The reason for this is that a structure is stored on the stack and with the size of the array and images being stored you will most likely get a stack overflow. A class is stored on the heap and managed by the garbage collection.

Fernando
0
 
Fernando SotoRetiredCommented:
Sorry hlominac;

You will also need the following two imports to test my code.

Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary

Fernando
0
 
hlominacAuthor Commented:
I generally use the register to save parameters.  I had hoped that I could read/write data to it.  What is normally stored there.  I suspect this is checked for viruses, is that true?
0
 
Bob LearnedCommented:
If you are storing application settings, using an app.config file is the general approach to the problem.

Bob
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.