假设要修改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
' 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
'用下面的函数'获取临时文件相关 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
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
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
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
http://expert.csdn.net/Expert/topic/2329/2329339.xml?temp=.2570459具有一定通用性.