请问能不能删除INI文件中的某一项呀?

解决方案 »

  1.   

    可以,若是一个Key,将Value写入值设为vbNullString就行了,若是删一个段两个都用vbNullString就行了,若是全部段,三个都是vbNullString就行了。当然若这样,删文件也行^_^
      

  2.   

    给个操作INI文件的例子,看看有点帮助'文件名SourceDB.ini文件
    Private 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
    Private 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'以下两个函数,读/写ini文件,固定节点setting,in_key为写入/读取的主键
    '仅仅针对是非值
    'Y:yes,N:no,E:error
    Public Function GetIniTF(ByVal In_Key As String) As Boolean
    On Error GoTo GetIniTFErr
    GetIniTF = True
    Dim GetStr As String
    GetStr = VBA.String(128, 0)
    GetPrivateProfileString "Setting", In_Key, "", GetStr, 256, App.Path & "\SourceDB.ini"
    GetStr = VBA.Replace(GetStr, VBA.Chr(0), "")
    If GetStr = "1" Then
       GetIniTF = True
       GetStr = ""
    Else
       GoTo GetIniTFErr
    End If
    Exit Function
    GetIniTFErr:
       Err.Clear
       GetIniTF = False
       GetStr = ""
    End FunctionPublic Function WriteIniTF(ByVal In_Key As String, ByVal In_Data As Boolean) As Boolean
    On Error GoTo WriteIniTFErr
    WriteIniTF = True
    If In_Data = True Then
     WritePrivateProfileString "Setting", In_Key, "1", App.Path & "\SourceDB.ini"
    Else
     WritePrivateProfileString "Setting", In_Key, "0", App.Path & "\SourceDB.ini"
    End If
    Exit Function
    WriteIniTFErr:
       Err.Clear
       WriteIniTF = False
    End Function
    '以下两个函数,读/写ini文件,不固定节点,in_key为写入/读取的主键
    '针对字符串值
    '空值表示出错
    Public Function GetIniStr(ByVal AppName As String, ByVal In_Key As String) As String
    On Error GoTo GetIniStrErr
    If VBA.Trim(In_Key) = "" Then
       GoTo GetIniStrErr
    End If
    Dim GetStr As String
    GetStr = VBA.String(128, 0)
     GetPrivateProfileString AppName, In_Key, "", GetStr, 256, App.Path & "\SourceDB.ini"
      GetStr = VBA.Replace(GetStr, VBA.Chr(0), "")
    If GetStr = "" Then
       GoTo GetIniStrErr
    Else
       GetIniStr = GetStr
       GetStr = ""
    End If
    Exit Function
    GetIniStrErr:
       Err.Clear
       GetIniStr = ""
       GetStr = ""
    End FunctionPublic Function WriteIniStr(ByVal AppName As String, ByVal In_Key As String, ByVal In_Data As String) As Boolean
    On Error GoTo WriteIniStrErr
    WriteIniStr = True
    If VBA.Trim(In_Data) = "" Or VBA.Trim(In_Key) = "" Or VBA.Trim(AppName) = "" Then
       GoTo WriteIniStrErr
    Else
     WritePrivateProfileString AppName, In_Key, In_Data, App.Path & "\SourceDB.ini"
    End If
    Exit Function
    WriteIniStrErr:
       Err.Clear
       WriteIniStr = False
    End Function
      

  3.   

    倒!不给写空值?这种函数千万别再传了,会害人的。Public Function SetIni(sec As String, key As String, val As String, file As String) As Boolean
        Dim i As Long
        i = WritePrivateProfileString(sec, key, val, file)
        If i > 0 Then
            SetIni = True
        Else
            SetIni = False
        End If
    End FunctionSetIni sec,key,vbNullString,file 清除一个Key
    SetIni sec,vbNullString,vbNullString,file 清除一个段
    SetIni vbNullString,vbNullString,vbNullString,file 清除全部内容Public Function GetIni(sec As String, key As String, file As String, Optional BufLen As Long = 1024) As String
        Dim i As Long, s As String, j As Long
        s = Space(BufLen)
        i = GetPrivateProfileString(sec, key, "", s, BufLen, file)
        If i > 0 Then
            s = replace(RTrim(s), Chr(0) & Chr(0), "")
            If Right(s, 1) = Chr(0) Then
                GetIni = Left(s, Len(s) - 1)
            Else
                GetIni = s
            End If
        End If
    End Functions=GetIni(sec,vbNullString,file) 可取得整个段中的所有KeyName,每个KeyName用Chr(0)分割,看出来了吧?只需
    dim a() as string 
    a=split(s,chr(0)),全部KeyName就进 a 数组了!千万不要让函数Replace(GetStr, Chr(0), "")呀,这样就无法实现返回全部KeyName的功能了。