C#:从INI中删除Section及其Keys的最简单方法是什么

时间:2016-05-05 22:32:27

标签: c# .net winforms ini

我有一个由多个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();
}

2 个答案:

答案 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);
}

缺少异常和格式处理但是完成了工作。