我有一段讀二進制文件的代碼,當我第一次讀的時候讀出的數據正常,
但當我第二再讀的時候,讀出的數據就全為零,不知是何原因望指點。
下面是我的代碼:
Public Function ReadStreamPicture(picFilename As String) As POINTSTRUCT()
Dim PtFile As String
Dim i As Integer
Static lOffset As Long
ReDim ptdata(0) As POINTSTRUCT          
    If picFilename = "" Then
        PtFile = App.Path & "\StreamPicture.cdv"
    Else
        PtFile = picFilename
    End If
    Open PtFile For Binary Access Read As #2
    GlbFRecord = LOF(2) / 16
    For i = 1 To GlbFRecord      '全局變量,已定義
        ReDim Preserve ptdata(i) As POINTSTRUCT
        Get #2, lOffset + 1, ptdata(i).dX
        Get #2, lOffset + 9, ptdata(i).dY
        lOffset = lOffset + 16
    Next i
    Close #2
    ReadStreamPicture = ptdata
End Function'POINTSTRUCT為自定義結構體。
Public Type POINTSTRUCT         'for Point
    dX As Double
    dY As Double
End Type作如下調用:
Private Sub mnuOpenStreamPic_Click()
Dim fStreamPic As String
On Error GoTo CanelOpenErr
    CdlgUsys.CancelError = True
    CdlgUsys.Filter = "*.CDV|*.CDV"
    CdlgUsys.Action = 1
    fStreamPic = CdlgUsys.FileName
    PU=ReadStreamPicture(fStreamPic)(1)’數據正常  PI=ReadStreamPicture(fStreamPic)(2)’全為零
CanelOpenErr:End Sub

解决方案 »

  1.   

    在打开(Open)文件后使用Seek 将文件指针指向文件头
    在关闭(Close)文件后调用FreeFile 释放占用的文件句柄
      

  2.   

    因为你的lOffset变量是static型的,所以当你第二次调用ReadStreamPicture时,此时已经超出文件尾了,所以都是0,把lOffset改为dim lOffset As Long 看看。
      

  3.   

    读一次后关闭文件
    在打开(Open)文件后使用Seek 将文件指针指向文件头
    在关闭(Close)文件后调用FreeFile 释放占用的文件句柄
      

  4.   

    同意 daviddivad(你真行,居然比我还快! Scorpio) 
    居然没看到这个
      

  5.   

    用daviddivad(你真行,居然比我快! Scorpio)的方法应该可行
      

  6.   

    謝謝名位支持,我已解決了。就象daviddivad(你真行,居然比我快! Scorpio)一樣。
    因我的程序需要不能那樣改。