这个问题已经烦了我几天了,就是解决不了,大侠你快点救我啊!● 我写的小程序功能如下: 1.界面Network.exe中有两个TextBox(txt_ip、txt_port),用户可以通过这两个 TextBox往文件config.txt中写入两行参数:
Server 服务IP地址(如:192.168.0.10)
Listen 服务端口号(如:8080)
2.用户也可以通过界面Network.exe来修改这两行参数,用户打开Network.exe时,两个TextBox会自动读入以前配置的两行参数,即:txt_ip_Text=192.168.0.10,txt_port.Text=8080● 写文件config.txt的代码: Dim Save_ip, Save_port As String
Save_ip = Form1.txt_ip.Text
Save_port = Form1.txt_port.Text
Open App.Path & "\config.txt" For Append As #1
Print #1, "#Server and port Configuration"
Print #1, "Server " & Save_ip
Print #1, "Listen " & Save_port
Close #1● 我的问题如下:
当文件config.txt中没有这两行参数时,我直接用Append增加就行了,但是如果参数已经存在,这两行参数对我来说将是不确定的(比如服务端口号可能是8080,也可能是6060),我该如何把参数分别读入到两个TextBox中?如何修改config.txt中的两行参数?
Server 服务IP地址(如:192.168.0.10)
Listen 服务端口号(如:8080)
2.用户也可以通过界面Network.exe来修改这两行参数,用户打开Network.exe时,两个TextBox会自动读入以前配置的两行参数,即:txt_ip_Text=192.168.0.10,txt_port.Text=8080● 写文件config.txt的代码: Dim Save_ip, Save_port As String
Save_ip = Form1.txt_ip.Text
Save_port = Form1.txt_port.Text
Open App.Path & "\config.txt" For Append As #1
Print #1, "#Server and port Configuration"
Print #1, "Server " & Save_ip
Print #1, "Listen " & Save_port
Close #1● 我的问题如下:
当文件config.txt中没有这两行参数时,我直接用Append增加就行了,但是如果参数已经存在,这两行参数对我来说将是不确定的(比如服务端口号可能是8080,也可能是6060),我该如何把参数分别读入到两个TextBox中?如何修改config.txt中的两行参数?
Dim Save_ip, Save_port As String
Save_ip = Form1.txt_ip.Text
Save_port = Form1.txt_port.Text
Open App.Path & "\config.txt" For Output As #1
Print #1, "#Server and port Configuration"
Print #1, "Server " & Save_ip
Print #1, "Listen " & Save_port
Close #1
'读取数据
Dim sHead, Save_ip, Save_port As String
Dim i As Integer
Open App.Path & "\config.txt" For Input As #1
Input #1, sHead, Save_ip, Save_port
i = InStr(1, Save_ip, " ", vbTextCompare)
Save_ip = Mid(Save_ip, i + 1)
i = InStr(1, Save_port, " ", vbTextCompare)
Save_port = Mid(Save_port, i + 1)
Form1.txt_ip.Text = Save_ip
Form1.txt_port.Text = Save_port
Close #1
Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long
Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Dim Save_ip, Save_port As String
Save_ip = Form1.txt_ip.Text
Save_port = Form1.txt_port.Text
Open App.Path & "\config.txt" For Output As #1
Print #1, "#Server and port Configuration"
Print #1, "Server " & Save_ip
Print #1, "Listen " & Save_port
Close #1End SubPrivate Sub Command2_Click()
Dim Save_ip, Save_port As String
Open App.Path & "\config.txt" For Input As #1
Line Input #1, temp$
Line Input #1, Save_ip
Line Input #1, Save_port
'MsgBox Save_ip
Close #1
txt_ip.Text = Mid(Save_ip, 8)
txt_port.Text = Mid(Save_port, 8)
End Sub
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php4 DirectoryIndex index.php
DirectoryIndex index.php3
DirectoryIndex index.php4#Server and port Configuration
ServerName 192.168.1.3
Listen 8888===============================================================================
问题来了:
1.为了让用户知道他之前配置的参数,如何将参数192.168.1.3和8888分别读入两个TextBox中(txt_ip、txt_port)??
2.如何修改这些参数(ServerName后面的IP地址192.168.1.3和Listen后面的端口号8888)??请注意:
1.行ServerName 192.168.1.3和行Listen 8888在文件中的具体行数是不确定的,只知道这两行一定紧跟在#Server and port Configuration的后面
2.ServerName后面的IP地址和Listen后面的端口号由用户输入,也是不确定的
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
Private Sub Form_Load()
txt_ip = fRead("ServerName")
txt_ip.Tag = txt_ip
txt_port = fRead("Listen")
txt_port.Tag = txt_port
End Sub'退出程序时,判断数据是否改变,如果改变,保存数据,也可以改成相应的按纽命令
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If txt_ip.Tag <> txt_ip Or txt_port.Tag <> txt_port Then
If MsgBox("数据已经改变,是否保存?", vbQuestion + vbYesNo) = vbYes Then
If txt_ip.Tag <> txt_ip Then
sWrite "ServerName", txt_ip
End If
If txt_ip.Tag <> txt_ip Or txt_port.Tag <> txt_port Then
sWrite "Listen", txt_port
End If
End If
End If
End Sub