帮我看下这里写错了什么,总是35600索引超出边界,数据不能显示完全,排序不连贯,帮我看下,谢谢
Private Sub Command11_Click()
Dim filename
If Winsock1(ListView1.SelectedItem.Index).State <> sckClosed Then
filename = InputBox("请选择本地文件名")
If filename = "" Then
MsgBox "请输入文件名"
GoTo exi:
End If
Dim FreeF As Integer
Dim LenFile As Long '文件的长度
Dim bytData() As Byte '存放数据的数组
Dim ipos As Long
Const imax = 65535
FreeF = FreeFile '获得空闲的文件号
Open filename For Binary As #FreeF '打开文件
DoEvents
LenFile = LOF(FreeF) '获得文件长度
If LenFile <= imax Then '如果要发送的文件小于数据块大小,直接发送
ReDim bytData(1 To LenFile) '根据文件长度重新定义数组大小
Get #FreeF, , bytData '把文件读入到数组里
Close #FreeF '关闭文件
Winsock1(ListView1.SelectedItem.Index).SendData bytData '发送数据
Exit Sub
End If
'文件大于数据块大小,进行分块发送
Do Until (ipos >= (LenFile - imax)) '发送整块数据的循环
ReDim bytData(1 To imax)
Get #FreeF, ipos + 1, bytData
Winsock1(ListView1.SelectedItem.Index).SendData bytData
ipos = ipos + imax '移动iPos,使它指向下来要读的数据
Loop
'这里要注意的是,必须检查文件有没有剩下的数据,如果文件大小正好等于数据块大小的
' 整数倍,那么就没有剩下的数据了
ReDim bytData(1 To LenFile - ipos) '发送剩下的不够一个数据块的数据
Get #FreeF, ipos + 1, bytData
Winsock1(ListView1.SelectedItem.Index).SendData bytData
Close #FreeF
End If
exi:
End Sub

解决方案 »

  1.   

    索引超出边界,应该是与数组操作有关系,我估计是存取数组元素时发生了问题
    例如:
    dim arrX(0 to 1) as long
    如果arrx(2)=100就会说索引超出边界
    如果debug.print arrx(2)也会说索引超出边界
      

  2.   

    非常感谢楼上几位的回贴,但是Dim FreeF As Long 改了还是不正确。楼上你说的修改哪呢?
      

  3.   

    索引超出边界,是索引值的问题,你把你的索引值的最大和最小值减1,试试。另外看看下面的问题,或许能够有所启示。
    http://topic.csdn.net/t/20050303/12/3821009.html#
    http://topic.csdn.net/t/20020813/15/937192.html
    http://zhidao.baidu.com/question/5138262.html