[英]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
。
此外,虽然实际名称在执行时并不重要,但最好在代码中保持一致以避免混淆。 因此,按顺序,参数应该是lpAppName
、 lpKeyName
、 lpString
和lpFileName
。 如果您想改用 .NET 风格的命名,请使用appName
、 keyName
、 [string]
和fileName
。 您可以使用value
而不是[string]
来避免转义关键字。
原来的:
我从来没有使用过,所以我对这个答案并不完全有信心,但是,据我所见,你正在将WritePrivateProfileSection
和WritePrivateProfileString
组合成一个也不起作用的组合。 您的 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.