本帖最后由 bcrun 于 2012-06-21 11:21:47 编辑

解决方案 »

  1.   

    Option Explicit
    Function Readlast(strFile$) As String
      Dim lFileLen&, lPoint&, iFileNum%, i&, strTemp$
      Dim arrBuf() As Byte, arrStr() As String
      iFileNum = FreeFile
      Open strFile For Binary As #iFileNum
      ReDim arrBuf(LOF(iFileNum) - 1)
      Get #iFileNum, , arrBuf
      strTemp = StrConv(arrBuf, vbUnicode)
      arrStr = Split(strTemp, vbCrLf)
      
      
      Readlast = arrStr(UBound(arrStr)) '这是最后一行
      
      'Readlast = arrStr(UBound(arrStr) - 1) '这是倒数最后二行
      
      'Readlast = arrStr(UBound(arrStr) - 2) '这是最倒数后三行
      
      'lPoint = LOF(iFileNum) - 2
      'lFileLen = lPoint
      'Debug.Print "Point >>>"; lPoint
      'Do
      'lFileLen = lFileLen - 1023
      'If (lFileLen < 1) Then lFileLen = 1
      'Debug.Print ">>>Point >>>"; lPoint
      'Debug.Print ">>>lFileLen >>>"; lFileLen
      'Get #iFileNum, lFileLen, arrBuf
      'If (lPoint > 1023) Then
      'i = 1023
      'Else
      'i = lPoint
      'End If
      'While (i > 0)
      'If (arrBuf(i) = 10) Then
      'If (arrBuf(i - 1) = 13) Then
      'lFileLen = lFileLen + i + 1
      'Exit Do
      'End If
      'End If
      'i = i - 1
      'Wend
      'If (lFileLen < 2) Then Exit Do
      'lPoint = lPoint - 1023
      'Loop
      'Close #iFileNum
      'iFileNum = FreeFile()
      'Open strFile For Input As #iFileNum
      'Seek #iFileNum, lFileLen
      'Line Input #iFileNum, strTemp
      'Close #iFileNum
      
      
    End Function
    Private Sub Command1_Click()
      Debug.Print Readlast("c:\txt.txt")
    End Sub
      

  2.   

    本帖最后由 bcrun 于 2012-05-31 09:32:23 编辑
      

  3.   

    Option Explicit
    Function Readlast(ByVal strFile$, ByRef str1 As String, ByRef str2 As String) As String
      Dim lFileLen&, lPoint&, iFileNum%, i&, strTemp$
      Dim arrBuf() As Byte, arrStr() As String
      iFileNum = FreeFile
      Open strFile For Binary As #iFileNum
      ReDim arrBuf(LOF(iFileNum) - 1)
      Get #iFileNum, , arrBuf
      
      Close #iFileNum
      
      strTemp = StrConv(arrBuf, vbUnicode)
      arrStr = Split(strTemp, vbCrLf)
      
      
      Readlast = arrStr(UBound(arrStr)) '这是最后一行
      
      str1 = arrStr(UBound(arrStr) - 1) '这是倒数最后二行
      
      str2 = arrStr(UBound(arrStr) - 2) '这是最倒数后三行
      
      'lPoint = LOF(iFileNum) - 2
      'lFileLen = lPoint
      'Debug.Print "Point >>>"; lPoint
      'Do
      'lFileLen = lFileLen - 1023
      'If (lFileLen < 1) Then lFileLen = 1
      'Debug.Print ">>>Point >>>"; lPoint
      'Debug.Print ">>>lFileLen >>>"; lFileLen
      'Get #iFileNum, lFileLen, arrBuf
      'If (lPoint > 1023) Then
      'i = 1023
      'Else
      'i = lPoint
      'End If
      'While (i > 0)
      'If (arrBuf(i) = 10) Then
      'If (arrBuf(i - 1) = 13) Then
      'lFileLen = lFileLen + i + 1
      'Exit Do
      'End If
      'End If
      'i = i - 1
      'Wend
      'If (lFileLen < 2) Then Exit Do
      'lPoint = lPoint - 1023
      'Loop
      'Close #iFileNum
      'iFileNum = FreeFile()
      'Open strFile For Input As #iFileNum
      'Seek #iFileNum, lFileLen
      'Line Input #iFileNum, strTemp
      'Close #iFileNum
      
      
    End Function
    Private Sub Command1_Click()
      Dim s1 As String, s2 As String, s3 As String
      s1 = Readlast("c:\txt.txt", s2, s3) 's1返回倒数第一行,s2返回倒数第二行,s3返回倒数第三行。
      Debug.Print s1, s2, s3 '分别是倒数第一行,倒数第二行,倒数第三行。
    End Sub
      

  4.   

      str1 = arrStr(UBound(arrStr) - 1) '这是倒数最后二行 
    此处下标越界
      

  5.   

    在我的电脑里面是正确的。你打了补丁VSSP6了吗?
      

  6.   

    唉,换了台XP机器测试了,无法达到我需要的结果,要么出现必选参数错误readlast,要么readlast结果空白,我发的那个原来的代码运行很正常!
      

  7.   

      4楼 ReDim arrBuff(LOF(intFileNum) - 1)下标越界
      

  8.   


    很可能是文本文件的问题,没有换行符。If UBound(arrStr) >= 1 Then str1 = arrStr(UBound(arrStr) - 1) '这是倒数最后二行
    If UBound(arrStr) >= 2 Then str1 = arrStr(UBound(arrStr) - 2) '这是倒数最后三行
      

  9.   

    如果文件大小超过4GB的话:
    按行倒序输出指定文本文件内容的命令行工具。支持大于2GB的文本文件。 
    http://download.csdn.net/detail/zhao4zhong1/4311265