我现在要在一个文本文件的未尾追加数据,但是我需要知道现在有文件已经到多少了,才能在后面追加
比如文件最后到了
100-baisoft
那么我要在后面追加
101-baisoft但是如果要在文件开始读取一直读到最后的话我感觉太慢了,可不可以直接读最后一行啊

解决方案 »

  1.   

    直接读最后肯定是不行的,这个在msdn里直接点明的
    偷懒的办法可以用readall全部读出来,然后用split分割取最后一个数组元素或者速度快一点的话用instrRev从后面找vbcrlf然后取出来
      

  2.   

    用二进制方法打开文件,Put 时将指针直接指向原文件长度。
      

  3.   

    Private Sub Command4_Click()
        Text1.Text = ""
        CommonDialog1.Filter = "*.txt 文件|*.txt"
        CommonDialog1.ShowOpen
            Open CommonDialog1.FileName For Input As #1
                Do While Not EOF(1)   ' 循环至文件尾。
                   Line Input #1, TextLine   ' 读入一行数据并将其赋予某变量。
                   Text1.Text = TextLine
                Loop
            Close #1
    End Sub
      

  4.   

    如果用open读取的话下面的应该是最快的了Open xxx For Input As #1
    s = StrConv(InputB$(LOF(1), #1), vbUnicode)
    Close #1
    v=split(s,vbcrlf)
    msgbox v(ubound(v))
      

  5.   

    你可以以追加形式打开文件
    for append
      

  6.   

    整体就是将文件内容一次性读入到字符串s中。具体每个函数自己查msdn。代码先放到环境中去跑。
      

  7.   

    如果每行长度一样,可以按照random方式打开,直接读最后一条记录
    如果不定长,就从最后一个字节逐个向前读,估计读个几十个字节就能读完最后一行了
    应该很快
      

  8.   

    追加数据用append方法打开文件,然后print数据...
    定位最后一行,用binary方法打开文件,put或者get语句的第二个参数就是指定文件写入或读取的位置(字节数),文件结尾就是文件长度,这种方法不需要全部读出文件,楼上有人不要误导....
      

  9.   

    [Quote=引用楼主 zzt369880281 的回复:]
    我现在要在一个文本文件的未尾追加数据,但是我需要知道现在有文件已经到多少了,才能在后面追加
    比如文件最后到了
    100-baisoft
    那么我要在后面追加
    101-baisoft
      

  10.   

    嘿嘿,没说你,我指9楼,他说of123的binary方法定位要全部读出数据才行,那是不正解的....楼主你追加数据用append方法直接print,会自动追加最后一行,不要定位:
    open youFile for append as #1
        print #1,youData
    close
      

  11.   

    假设你每行最长80个字符,用binary方式打开文件,用seek语句将读写位置移到文件长度减82的位置,将读出的字节保存到字节数组中,转为字符串,instrrev找第一或第二个vbLF,读出比如100-baisoft,用seek语句将读写位置移到文件末尾,Put“101-baisoft”+vbCRLF对应的字节数组,关闭文件。
      

  12.   

    如果想读取最后一行,数据不是定长也可以:Function GetFileLastLine(fName As String) As String
    'fName   要处理的文件路径和名称
        Dim hFile As Long
        Dim recNumber1 As Long, recNumber2 As Long
        Dim Char As String * 1
        Dim strTmp As String
        
        recNumber2 = FileLen(fName)     '用于定位到最后一个字符
        hFile = FreeFile
        Open fName For Binary As hFile
            '因为最后一行可能包含空格符回车符等
            '所以要先找到最后一个有效字符
            '有效字符条件要根据实际情况定,本示例定为字母和数字
            Do
                Get #hFile, recNumber2, Char
                recNumber2 = recNumber2 - 1
            Loop Until Char Like "[0-9a-zA-Z]"
            '从最后一个有效字符起,再向前找最后一个换行符或回车符
            recNumber1 = recNumber2
            Do
                Get #hFile, recNumber1, Char
                recNumber1 = recNumber1 - 1
            Loop Until Char = vbCr Or Char = vbLf
            '读取最后一行
            strTmp = Space(recNumber2 - recNumber1 + 1)
            Get #hFile, recNumber1 + 1, strTmp
        Close
        GetFileLastLine = strTmpEnd Function'调用:
    Private Sub Command1_Click()
        Debug.Print GetFileLastLine("D:\db_backup\20100818p.txt") '883,999KB
    End Sub
      

  13.   


    这个方法可以的,因为使用了指针
    当然 还可以采用 instrb() 从最后向前找换行符或回车符,如果行的长度比较长的话,速度将会更快
    如果包含中文,只能用instr()了,速度稍慢一点,和vbman2003速度一样。
      

  14.   

    如果行里只包含中文,vbman2003的参数要修改。
    instrb 比instr 更快