如题

解决方案 »

  1.   

    假设要修改c:\123.txt(c:\123.txt):
    abc
    123
    xyz修改后:
    abc
    000
    xyz也就是将c:\123.txt中的第二行修改为000' 将指定文件的指定行数修改为指定内容
    ' 代码如下:Option ExplicitPrivate Sub ModifyFile(ByVal FileName As String, ByVal n As Long, ByVal str As String)
    Dim s As String, i As Long
    i = 1
    Open FileName For Input As #1
        Open Left(FileName, Len(FileName) - 4) & "tmp" & Right(FileName, 4) For Output As #2
            Do Until EOF(1)
                Input #1, s
                If i = n Then
                    Print #2, str
                Else
                    Print #2, s
                End If
                i = i + 1
            Loop
        Close #2
    Close #1
    Kill FileName
    Name Left(FileName, Len(FileName) - 4) & "tmp" & Right(FileName, 4) As FileName
    End SubPrivate Sub Command1_Click()
    ModifyFile "c:\123.txt", 2, "000"
    End Sub
      

  2.   

    ' rainstormmaster(rainstormmaster)是这个意思,也是个好办法。
    Option ExplicitPrivate Sub Command1_Click()
    Dim FileLine() As String, i As Long
    i = 1
    Open "c:\123.txt" For Input As #1
        Do Until EOF(1)
            ReDim Preserve FileLine(i) As String
            Input #1, FileLine(i)
            i = i + 1
        Loop
    Close #1
    FileLine(2) = "000"
    Open "c:\123.txt" For Output As #1
        For i = 1 To UBound(FileLine)
            Print #1, FileLine(i)
        Next i
    Close #1
    End Sub
      

  3.   

    '用下面的函数'获取临时文件相关
    Public Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
    Public Declare Function GetTempFileName Lib "kernel32" Alias "GetTempFileNameA" (ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, ByVal lpTempFileName As String) As Long'得到临时文件名
    Public Function fGetTempFileName(ByVal sFileHeader$) As String
       Dim iReturn As String, iTmpL&
       Dim iDriveName As String * 256
       iTmpL = GetTempPath(256, iDriveName) 'App.Path
       GetTempFileName Left(iDriveName, iTmpL), sFileHeader, 0, iDriveName
       iReturn = Left$(iDriveName, InStr(iDriveName, Chr(0)) - 1)
       If Dir(iReturn) <> "" Then Kill iReturn
       fGetTempFileName = iReturn
    End Function'得到config.txt文件位置,默认的位置在程序目录下
    Public Function fGetDefaultFilename$()
        Dim iReturn$
        iReturn = App.Path
        If Right(iReturn, 1) <> "\" Then iReturn = iReturn & "\"
        iReturn = iReturn & "config.txt"
        iReturn = "c:\config.txt"
        
        fGetDefaultFilename = iReturn
    End Function'读取文件内容
    Public Function fRead$(ByVal sKey$ _
                , Optional ByVal sDefault$ = "" _
                , Optional ByVal sFileName$ = "")
                
        Dim iFn&, iStr$, iReturn$
        Dim iHead$
        
        '定义判断数据的起点
        iHead = "#Server and port Configuration"
        
        '检查要读取的文件
        If sFileName = "" Then sFileName = fGetDefaultFilename
        If Dir(sFileName) = "" Then GoTo lbExit
        
        '打开文件
        iFn = FreeFile
        Open sFileName For Input As iFn
        
        '读取内容
        sKey = sKey & "*"
        Do While Not EOF(iFn)
            Line Input #iFn, iStr
            If Trim(iStr) = iHead Then
                Do While Not EOF(iFn)
                    Line Input #iFn, iStr
                    iStr = LTrim(iStr)
                    If iStr Like sKey Then
                        iReturn = RTrim(Mid(iStr, Len(sKey)))
                        GoTo lbOk
                    End If
                Loop
            End If
        Loop
        
    lbOk:
        '关闭文件
        Close iFn
        
    lbExit:
        fRead = IIf(iReturn = "", sDefault, iReturn)
    End Function'写文件内容
    Public Sub sWrite(ByVal sKey$ _
                , ByVal sValue$ _
                , Optional ByVal sFileName$ = "")
                
        Dim iFnR&, iFnW&, iTmpFn$, iStr$
        Dim iHead$
        
        '定义判断数据的起点
        iHead = "#Server and port Configuration"
        
        '检查要写的文件
        If sFileName = "" Then sFileName = fGetDefaultFilename
        
        '打开要写的文件
        If Dir(sFileName) = "" Then '如果不存在,创建文件
            iFnW = FreeFile
            Open sFileName For Output As iFnW
            GoTo lbprint
        Else
            '打开写入文件
            iTmpFn = fGetTempFileName("zj")
            iFnW = FreeFile
            Open iTmpFn For Output As iFnW
            
            '打开读取文件
            iFnR = FreeFile
            Open sFileName For Input As iFnR
        End If
        
        '替换相应内容
        Do While Not EOF(iFnR)
            Line Input #iFnR, iStr
            If Trim(iStr) = iHead Then
                Print #iFnW, iStr
                iHead = ""
                Do While Not EOF(iFnR)
                    Line Input #iFnR, iStr
                    iStr = LTrim(iStr)
                    If iStr Like sKey & "*" Then '如果已经存在,直接替换相应的内容
                        Print #iFnW, sKey & " " & sValue
                        sKey = ""
                        GoTo lbOk
                    End If
                    Print #iFnW, iStr
                Loop
            Else
                Print #iFnW, iStr
            End If
        Loop
        
    lbOk:
        '关闭文件
        Close iFnR
        
    lbprint:
        '判断那些内容要写
        If iHead <> "" Then Print #iFnW, iHead
        If sKey <> "" Then Print #iFnW, sKey & " " & sValue
        Close iFnW
        
        '如果使用了临时文件,需要将临时文件复制成正式文件
        If iTmpFn <> "" Then
            Kill sFileName
            FileCopy iTmpFn, sFileName
            Kill iTmpFn
        End If
    End Sub
      

  4.   

    该函数是针对下面问题的处理
    http://expert.csdn.net/Expert/topic/2329/2329339.xml?temp=.2570459具有一定通用性.