我是个初学者,再保存文件时出现错误,请各位能够指导:
我新建一个工程做实验文件读写,放置一个textbox和三个commandbutton分别为保存,打开和显示.将代码粘贴如下:
Option ExplicitPrivate Score As mydata
Private Type mydata
a As String * 4
b As String * 10
c() As Integer            '我要保存这个动态数组
End TypeDim filenum As Integer
Dim length As Long
Dim num As Long
Private Sub Command1_Click()
Dim i As Integer
Dim filename As String
If Text1.Text <> "" ThenCommonDialog1.Filter = "(*.dc)|*.dc"
CommonDialog1.InitDir = App.Path
CommonDialog1.filename = ""
CommonDialog1.ShowSave
filename = CommonDialog1.filename
If Len(filename) > 0 Then
Open filename For Random As filenum Len = length
num = LOF(filenum) / length + 1 '在运行到这里会出现记录长度错误,不知道为什么,这一句的计算方法是怎么样的呢?
Label1.Caption = "来来来!"
Score.b = Label1.Caption
Put #filenum, num, Score
Close #filenum
End If
End If
Label1.Caption = "你好!"
End SubPrivate Sub Command2_Click()
Dim tmpc(4, 0) As Integer
Dim o As Integer
CommonDialog1.Filter = "(*.dc)|*.dc|全部文件(*.*)|*.*"
CommonDialog1.InitDir = App.Path
CommonDialog1.filename = ""
CommonDialog1.ShowOpen
filename = CommonDialog1.filename
If Len(CommonDialog1.filename) > 0 Then
Open filename For Random As filenum Len = length
Get #filenum, num, Score
Label1.Caption = Score.b
Text1.Text = Score.a
tmpc(0, 0) = Score.c(0, 0)
tmpc(1, 0) = Score.c(1, 0)
Close #filenum
End If
End SubPrivate Sub Command3_Click()      '在这里我要单步看结果是否正确用
Dim a As Integer
Dim b As Integer
For a = 0 To 10
Text1.Text = Score.c(o, 0)
Next
End SubPrivate Sub Form_Load()
ReDim Score.c(10, 1)
Text1.Text = ""
length = Len(Score)
filenum = FreeFile
Label1.Caption = "你好!"
Score.c(0, 0) = 1
Score.c(1, 0) = 2
Score.c(2, 0) = 3
Score.c(3, 0) = 3
Score.c(4, 0) = 4
End SubPrivate Sub Text1_Change()
Score.a = Text1.Text
End Sub
出现这样的长度记录错误是为什么?当我去掉与动态数组c() As Integer相关代码后就正常了,但是num = LOF(filenum) / length + 1的计算结果是多少,这是为什么的?它计算的方法是怎么回事呢?怎么样才能保存这样的含有动态数组的自定义类型文件呢?
       谢谢你们!

解决方案 »

  1.   

    c() As Integer    '这句好像有问题吧
    读写随机文件时的自定义记录类型应该是定长的,而你的mydata中含有动态数组,所以才会出错
      

  2.   

    字符串与动态数组是不能用于UDT的
    因为它们都是引用型数据
      

  3.   

    VB的Random文件读写方式只能读写固定长度纪录的文件
    也就是你所使用的那种方式实际上(对于文件读写)是非常危险的(极有可能引起内存泄漏甚至是一般保护性错误)现在的VB书太烂
    特别是对于字符串和文件有许多错误的用法
    而VB的编译器又比较宽容(既然字符串和动态数组对于文件读写有潜在的危险,VB提供这功能干吗)如果我是VB的设计者
    绝对会不允许引用型数据用于Random文件读写方式
    甚至不打算支持Random文件读写方式
    只能使用流式文件
    建议学习一下《数据结构》,了解一下动态数据如何存储
      

  4.   

    length 赋值了吗?length 应当是 1-32767 之间的一个值。