2015-04-16 33 views
1

我能写出完美的文件......但是我无法从文件中读取和读出的数据插入到一个列表框。将数据载入列表框

Public myData As New MySettings 
Public saveFile As String = ("mysettings.ini") 


'SAVE INFO TO SETTINGS FILE 

    Dim fs As Stream = New FileStream(saveFile, FileMode.Create) 
    Dim bf As BinaryFormatter = New BinaryFormatter() 

    For l_index As Integer = 0 To ListBox1.Items.Count - 1 
     Dim l_text As String = CStr(ListBox1.Items(l_index)) 
     bf.Serialize(fs, l_text) 
    Next 


    fs.Close() 
    Return 

这是我有麻烦的部分...

'LOAD INFO FROM SETTINGS FILE 

    Dim fs As Stream = New FileStream(saveFile, FileMode.Open) 
    Dim bf As BinaryFormatter = New BinaryFormatter() 

    For l_index As Integer = 0 To saveFile.Count - 1 
     Dim l_text As String = CStr(saveFile(l_index)) 
     'myData = CType(bf.Deserialize(fs), CType(myData)) 
     ListBox1.Items.Add(myData) 
    Next 

    fs.Close() 
    Return 

任何帮助都将不胜感激,在正确的方向,甚至一个点。

在此先感谢!

+0

如果答案帮助,请给予好评/点击勾选所以这是从未答复的名单中删除 – Plutonix

回答

0

列表框ObjectCollection(产品)没有标记为可序列化,所以你不能序列化整个事情一次。您可能遇到过这种情况,并使用循环来序列化每个项目。循环确实出现了序列化的每个项目,但我不知道你怎么能在一个循环中反序列化 - 你不会知道有多少项目有,也不会对串行。同时

而不是一个项目,你可以在ListBox项目复制到一个数组和序列化整个事情:

Dim ary(lb.Items.Count - 1) As Object 
lb.Items.CopyTo(ary, 0) 

' OpenOrCreate! 
Using fs As New FileStream("C:\Temp\lbitems.bin", FileMode.OpenOrCreate) 
    Dim bf As New BinaryFormatter 
    bf.Serialize(fs, ary) 

End Using  ' close and dispose of stream 

反序列化则刚刚相反:

Using fs As New FileStream("C:\Temp\lbitems.bin", FileMode.Open) 
    Dim bf As New BinaryFormatter 
    Dim myAry = bf.Deserialize(fs) 

    lb.Items.Clear() 
    lb.Items.Add(myAry) 

End Using 

可以使它使用List(of String)更简单一些,并将其指定为DataSource。

Private myLBItems As New List(Of String) 
    ... 
' fake items to add 
myLBItems.Add("Foo") 
myLBItems.Add("Bar") 
myLBItems.Add("Option") 
myLBItems.Add("Strict") 

lb.DataSource = myLBItems 

使用列表作为数据源,你没有从这里复制项目有 - 无论是在列表会出现在列表框。序列化也很简单:

bf.Serialize(fs, myLBItems) 

由于反序列化返回一个对象,你需要将它转换(Option Strict):

myLBItems = CType(bf.Deserialize(fs), List(Of String)) 

注:这可能不是做你想要的所有东西。您的代码将其转换为字符串后序列化ListBox中的内容。稍后,它看起来像要反序列化为MySettings类型。

如果MySettings是像一个名称和值对(或它们的集合),大概一半的数据和所有类型的信息将被丢失。