目前有三个结构体,其中有两个是结构体数组,请问有可能把他们写入到一个文件中并能正确读出吗?如果没有办法,那请教有什么好的办法能保存并读出呢?谢谢大家。

解决方案 »

  1.   


    Private Type ss1
       a As String
       b As Integer
    End TypePrivate Type ss2
       a As String
       b As Integer
       c As Integer
    End TypePrivate Type ss3
       a As String
       b As Integer
       c As Integer
       d As Single
    End TypePrivate Type ss4
        a(1 To 5) As ss1
        b(1 To 5) As ss2
        c As ss3
    End TypePrivate Sub Command1_Click()
       '利用tmp4做中间变量,就可以方便存取
       Dim tmp1(1 To 5) As ss1
       Dim tmp2(1 To 5) As ss2
       Dim tmp3 As ss3
       Dim tmp4 As ss4
       
       Dim i As Integer
       
       '给变量赋值
       For i = 1 To 5
           tmp1(i).a = "A" & i
           tmp1(i).b = i
           tmp2(i).a = "B" & i
           tmp2(i).b = i
           tmp2(i).c = i
       Next
       tmp3.a = "C"
       tmp3.b = 100
       tmp3.c = 200
       tmp3.d = 9.9
       
       '把三个自定义类型传给tmp4
       For i = 1 To 5
           tmp4.a(i).a = tmp1(i).a
           tmp4.a(i).b = tmp1(i).b
           tmp4.b(i).a = tmp2(i).a
           tmp4.b(i).b = tmp2(i).b
           tmp4.b(i).c = tmp2(i).c
       Next
       tmp4.c.a = tmp3.a
       tmp4.c.b = tmp3.b
       tmp4.c.c = tmp3.c
       tmp4.c.d = tmp3.d
       
       '把自定义变量内容存入c:\temp.bin
       Open "c:\temp.bin" For Random As #1 Len = Len(tmp4)
       Put #1, , tmp4
       Close #1
       
       '清除变量内容
       For i = 1 To 5
           tmp1(i).a = ""
           tmp1(i).b = 0
           tmp2(i).a = ""
           tmp2(i).b = 0
           tmp2(i).c = 0
       Next
       tmp3.a = ""
       tmp3.b = 0
       tmp3.c = 0
       tmp3.d = 0
       
       For i = 1 To 5
           tmp4.a(i).a = tmp1(i).a
           tmp4.a(i).b = tmp1(i).b
           tmp4.b(i).a = tmp2(i).a
           tmp4.b(i).b = tmp2(i).b
           tmp4.b(i).c = tmp2(i).c
       Next
       tmp4.c.a = tmp3.a
       tmp4.c.b = tmp3.b
       tmp4.c.c = tmp3.c
       tmp4.c.d = tmp3.d
       
       '读取自定义变量内容给tmp4
       Open "c:\temp.bin" For Random As #1 Len = Len(tmp4)
       Get #1, , tmp4
       Close #1
       
       '把tmp4的内容传给三个自定变量
       For i = 1 To 5
           tmp1(i).a = tmp4.a(i).a
           tmp1(i).b = tmp4.a(i).b
           tmp2(i).a = tmp4.a(i).a
           tmp2(i).b = tmp4.b(i).b
           tmp2(i).c = tmp4.b(i).c
       Next
       tmp3.a = tmp4.c.a
       tmp3.b = tmp4.c.b
       tmp3.c = tmp4.c.c
       tmp3.d = tmp4.c.d
       
    End Sub但希望你好好理解,尽快结贴。
      

  2.   

    得看是什么要的结构体,如果结构体中不包含数组或字符串这类不定长的成员,由于数据长度可预见,因此可直接以二进制方式存入文件,读取时先读到二进制数组中,然后使用CopyMemory拆分到结构体中即可。
    如果包含数组、字符串甚至对象,则最好使用属性包进行读取。
      

  3.   

    谢谢六楼的提醒,没有想到结构体嵌套!
    谢谢七楼!To 八楼: 结构体内有定长字符串,其他就是数字,用CopyMemory试过了,老是造成程序崩溃,可能是我使用不当。现在我换了一种方式,写入XML里面了,不纠缠这个问题了,谢谢大家。