这个问题已经烦了我几天了,就是解决不了,大侠你快点救我啊!● 我写的小程序功能如下: 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中的两行参数?

解决方案 »

  1.   

    '读出
    Private Sub Command2_Click()
    Dim Save_ip, Save_port As String
        
        Open "d:\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 = Save_ip
        txt_port.Text = Save_port
    End Sub
    '======================QQYY_sj==========================
      

  2.   

    '将Append改成Output即可实现修改,因为每次打开该文件都会将其清空
        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
      

  3.   

    将你的参数保存为ini文件的格式,用一下几个api函数读写,很方便的
    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
      

  4.   

    你可以将后两行读到两个变量中,然后分解
    Server 192.168.0.10  --〉strServer
    Listen 8080          -->strLIsten如:
    Dim intLine as integer
    dim strServer as string 
    dim strListen as string 
    Open App.Path & "\config.txt" For Input As #1   ' 打开文件。
    Do While Not EOF(1)   ' 循环至文件尾。
       intLine=intLine+1
       if intLine=2 then   Line Input #1, strServer   ' 读入第2行数据将其赋予某变量。   if intLine=3 then   Line Input #1, strListen  ' 读入第3行数据将其赋予某变量。Loop
    Close #1   ' 关闭文件。
    if len(strServer)>7 then strserver=right(strListen,len(strServer)-7)
    '将Server 192.168.0.10的从第7个字符后的字符串赋给strServer
    if len(strListen)>7 then strListen=right(strListen,len(strListen)-7)
    '同上
    txt_ip.text=strServer
    txt_port.text=strListen
      

  5.   

    Private Sub Command1_Click()
    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
      

  6.   

    众位,是我没有把问题表达清楚,害得大伙白忙一顿,对不住了!我把我的问题再表达一遍:有一个Apache服务器配置文件config.conf,我需要对其进行读写操作,该文件的部分内容如下:LoadModule php4_module C:/FZOA/bin/sapi/php4apache2.dll
       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后面的端口号由用户输入,也是不确定的
      

  7.   

    你可以将后两行读到两个变量中,然后分解
    Server 192.168.0.10  --〉strServer
    Listen 8080          -->strLIsten
    如:
    Dim intLine as integer
    dim strServer as string 
    dim strListen as string 
    dim strTemp as string Open App.Path & "\config.txt" For Input As #1   ' 打开文件。
    Do While Not EOF(1)   ' 循环至文件尾。
       strTemp=""
       Line Input #1, strTemp
       if strTemp="#Server and port Configuration" Then 
           intLine=intLine+1
       end if
       if intLine>0 then intLine=intLIne+1
       select case intLine
           case 2
              Line Input #1, strServer   
           case 3
              Line Input #1, strListen  
           case Is >3 
              break
       end select 
    Loop
    Close #1   ' 关闭文件。
    if len(strServer)>7 then strserver=right(strListen,len(strServer)-7)
    '将Server 192.168.0.10的从第7个字符后的字符串赋给strServer
    if len(strListen)>7 then strListen=right(strListen,len(strListen)-7)
    '同上
    txt_ip.text=strServer
    txt_port.text=strListen
      

  8.   

    '用下面的函数'获取临时文件相关
    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
      

  9.   

    '运行程序时,调用函数读取保存的值
    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