rt

解决方案 »

  1.   

    Dim oFSO As FileSystemObject
    Dim oTextStream As TextStream
    Dim oFirstLine As String
    Dim i, LineNum As Integer
    Set oFSO = CreateObject("scripting.filesystemobject")
    Set oTextStream = oFSO.OpenTextFile("c:\aa.txt", ForAppending, False, TristateFalse)
    oTextStream.Write (vbCrLf & "这是一个新增的测试行")'以下为删除某一行,如第二行
    oTextStream.Close
    Set oTextStream = oFSO.OpenTextFile("c:\aa.txt", ForReading, False, TristateFalse)
    Dim str(1000) As String        '这里根据实际情况可增大或缩小数组的维数
    i = 0
    Do While oTextStream.AtEndOfLine <> True
        str(i) = oTextStream.ReadLine
        i = i + 1
    Loop
    LineNum = i
    oTextStream.Close
    Set oTextStream = oFSO.OpenTextFile("c:\aa.txt", ForWriting, False, TristateFalse)
    oTextStream.Write str(0)
    For i = 1 To LineNum - 1
       If i <> 1 Then
          oTextStream.Write vbCrLf & str(i)
       End If
    Next i
    oTextStream.Close
    Set oFSO = Nothing
      

  2.   

    '删除c:\test.txt第N行
    dim N as Long
    N = 99'假设删第99行FileCopy "c:\test.txt", "c:\test1.txt"'复制到副本
    Dim TextLine as string
    Open "c:\test1.txt" For Input As #1   ' 打开文件副本
    Open "c:\test.txt" For Output As #2   ' 重写文件
    dim i as long
    Do While Not EOF(1)   ' 循环至文件尾
       i = i + 1
       Line Input #1, TextLine   ' 读入一行数据并将其赋予某变量
       If Not N=i Then Print #1, TextLine'如果不是第N行,复制
    Loop
    Close #1   ' 关闭文件
    kill "c:\test1.txt"'删除副本
      

  3.   

    Option ExplicitPrivate Sub Command1_Click()
        Dim i As Long
        Dim DelIndex As Long
        Dim Str As String
        Dim sRet As String
        Dim Arr() As String
        
        DelIndex = 5
        Str = ReadFile("C:\Text.txt")
        If Len(Str) > 0 Then
            Arr = Split(Str, vbCrLf)
            For i = LBound(Arr) To UBound(Arr)
                If (i + 1) <> DelIndex Then
                    sRet = sRet + Arr(i)
                End If
            Next
        End If
        WriteFile "c:\Text.txt", sRet
    End Sub
    '调用方法:WriteFile(文件的路径和文件名,写入的数据)
    Private Function WriteFile(ByVal pFile As String, ByVal inText As String) As Boolean
        On Error Resume Next
        Dim fN As Integer
        fN = FreeFile
        Open pFile For Output As #fN
            Put #fN, , inText
        Close #fN
        WriteFile = (Err.Number = 0)
    End Function
    '调用方法:ReadFile(文件的路径和文件名)
    Private Function ReadFile(pFile As String) As String
        Dim fN As Integer
        fN = FreeFile
        Open pFile For Binary Access Read As #fN
            ReadFile = Space(FileLen(pFile))
            Get #fN, , ReadFile
        Close #fN
    End Function
      

  4.   

    哦,有错误,写文件的文件号2写成1了,写文件没有关闭,改正:'删除c:\test.txt第N行
    dim N as Long
    N = 99'假设删第99行FileCopy "c:\test.txt", "c:\test1.txt"'复制到副本
    Dim TextLine as string
    Open "c:\test1.txt" For Input As #1   ' 打开文件副本
    Open "c:\test.txt" For Output As #2   ' 重写文件
    dim i as long
    Do While Not EOF(1)   ' 循环至文件尾
       i = i + 1
       Line Input #1, TextLine   ' 读入一行数据并将其赋予某变量
       If Not N=i Then Print #2, TextLine'如果不是第N行,复制
    Loop
    Close #1   ' 关闭文件
    Close #2   ' 关闭文件
    kill "c:\test1.txt"'删除副本
      

  5.   

    三人三种代码,各有特色。
    都可以达到目的
    myhgyp的代码使用FSO,适合初学者,但需引用对象,效率与通用性弱一些。
    viena的代码简单适用,清晰明了,但IO操作多了些,文件大时影响效率。
    dongge2000的代码,一次性载入与保存文件,内存中处理,IO交换次数最少,效率高得多,但处理时却使用了最慢的长字符串连接处理,效率又太低了,存在败笔。我想对内存中的处理,可这样:
    Arr = Split(Str, vbCrLf)
    Arr(DelIndex-1)=""
    Str = Join(Arr, vbCrLf)不过,这会产生一个空行,若对空行不能接受的话,可这样!
    Arr = Split(Str, vbCrLf)
    'Arr(DelIndex-1)="换成一句文本不可能出现的内容"
    Arr=Filter(Arr, Arr(DelIndex-1), False, vbTextCompare)
    Str = Join(Arr, vbCrLf)Join、Split、Filter是专为解决VB长字符串运算极慢,而设计的函数,建议多多使用。