我有一个由多个Sections组成的INI文件,以及一个名为" Path"的单个键。 INI中的所有内容都加载到Load上的DataGridView中,用于处理文件的内容。
INI Example:
[First Entry]
Path=C:\test1.txt
[Second Entry]
Path=C:\test2.txt
[Third Entry]
Path=C:\test3.text
删除不会删除整个文件的[Second Entry]最简单的方法是什么?
以下是我目前正在处理的将新信息写入文件的方法:
INI Class:
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string fileName);
public void Write(string section, string key, string value)
{
WritePrivateProfileString(section, key, value.ToLower(), path);
}
Form Button:
private void WriteINI()
{
myINI.Write(txtName.Text, "Path", txtPath.Text);
ReadINI();
}
答案 0 :(得分:6)
使用WritePrivateProfileString
方法,您可以通过将lpKeyName
的空值传递给方法来删除整个部分:
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool WritePrivateProfileString(
string lpAppName, string lpKeyName, string lpString,string lpFileName);
private void button1_Click(object sender, EventArgs e)
{
WritePrivateProfileString("Second Entry", null, null, @"d:\test.ini");
}
lpKeyName
要与字符串关联的键的名称。如果 密钥在指定的部分中不存在,它被创建。如果 此参数为NULL,整个部分包括所有条目 在该部分内,将被删除。
答案 1 :(得分:1)
如何自己完成?在这些方面的东西:
private static void RemoveSectionFromIniFile(string file, string section)
{
using (var reader = File.OpenText(file))
{
using (var writer = File.CreateText(file + ".tmp"))
{
var i = false;
while (reader.Peek() != -1)
{
var line = reader.ReadLine();
if (!string.IsNullOrWhiteSpace(line))
{
if (line.StartsWith("[") && line.EndsWith("]"))
{
if (i) i = false;
else if (line.Substring(1, line.Length - 2).Trim() == section) i = true;
}
}
if (!i) writer.WriteLine(line);
}
}
}
File.Delete(file);
File.Move(file + ".tmp", file);
}
缺少异常和格式处理但是完成了工作。