繁体   English   中英

如何使用 vb.net 删除一段 INI 文件中的一行?

[英]How to delete a row in one section of INI file using vb.net?

我正在尝试删除 INI 文件部分内的一行,但在触发删除代码后,INI 文件内容保持不变。 INI 文件的已删除数据似乎没有被删除。

代码:

  <DllImport("kernel32.dll", SetLastError:=True)> _
    Public Shared Function WritePrivateProfileSection( _
        ByVal lpAppName As String, _
        ByVal lpString As String, _
        ByVal lpValue As String, _
        ByVal lpFileName As String) As Boolean
    End Function   

    Public Sub DeleteSection(ByRef sApp As String, ByRef sKey As String)
        Try
            Dim ret As Boolean
            Dim sBuff As New System.Text.StringBuilder
            sBuff.Capacity = 256

            ret = WritePrivateProfileSection(sApp, sKey, "", m_sIniFile)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

用法:

m_ini.DeleteSection("AppName", "AppKey")

这样做的主要目的是删除键及其值。

但问题是删除它后,INI 文件没有任何变化。

问候,

编辑:

正如 Jimi 在评论中指出的那样, WritePrivateProfileString可以删除一个键。 看来您确实应该调用WritePrivateProfileString而不是WritePrivateProfileSection并且第三个参数应该是Nothing而不是空String

此外,虽然实际名称在执行时并不重要,但最好在代码中保持一致以避免混淆。 因此,按顺序,参数应该是lpAppNamelpKeyNamelpStringlpFileName 如果您想改用 .NET 风格的命名,请使用appNamekeyName[string]fileName 您可以使用value而不是[string]来避免转义关键字。

原来的:

我从来没有使用过,所以我对这个答案并不完全有信心,但是,据我所见,你正在将WritePrivateProfileSectionWritePrivateProfileString组合成一个也不起作用的组合。 您的 function 被命名为WritePrivateProfileSection但 function 有三个参数,而不是四个。 WritePrivateProfileString有四个,但不能满足您的要求。

WritePrivateProfileString会将一个值写入一个键,如果您想清除该键,这很好,但如果您想删除它,那就不对了。 WritePrivateProfileSection采用一个包含所有键和值的单个String来写入一个部分,因此这是您需要使用的,并且您需要省略要从该String中删除的键。

看来您实际需要做的是读取该部分中的所有键和值,然后从中构造一个String ,而忽略要删除的键。 然后,您使用该String调用WritePrivateProfileSection以使用修改后的数据覆盖该部分。 GetPrivateProfileSection function 将获得一个包含所有当前键和值的String ,因此您应该调用它,处理结果,然后将操作数据传递给WritePrivateProfileSection

我还建议使用 WritePrivateProfileString,但您应该声明它是正确的。

' Writes String values
<DllImport("Kernel32.dll", CharSet:=CharSet.Unicode,
           SetLastError:=True, EntryPoint:="WritePrivateProfileStringW")>
Public Shared Function WritePrivateProfileString(
    Section As String,
    Key As String,
    WriteStr As String,
    IniFile As String) As Integer
End Function

在 .NET 中,标准是 Unicode,所以使用带有 W 结尾(= 宽)的 EntryPoint

然后删除键/条目很容易:

Public Sub DeleteEntry(IniFile As String, Section As String, Key As String)
    WritePrivateProfileString(Section, Key, vbNullString, IniFile)
End Sub

您还可以使用 WritePrivateProfileString 删除完整的部分:

Public Sub DeleteSection(IniFile As String, Section As String)
    WritePrivateProfileString(Section, vbNullString, vbNullString, IniFile)
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM