INI中的每个部分应用空行分隔

时间:2014-04-21 05:09:50

标签: c# ini

我使用WritePrivateProfileString kernal32函数写入INI文件。

但是当我写入INI文件时,该部分将仅在下面,

[Section1]
Key1 = value1
key2 = value2
[Section2]
Key1 = value1
key2 = value2

现在我正在寻找单独部分的解决方案,如下所示

[Section1]
Key1 = value1
key2 = value2

[Section2]
Key1 = value1
key2 = value2

我只是为现有的INI文件写了几个键,所以我不想使用任何第三方代码。 在我的情况下,不建议在文本模式下打开现有文件并明确显示空行。

请告知是否有任何kernel32函数以这种方式放置/写入部分,或者以任何标准方式执行相同操作。

如果已经存在,它应该足够聪明以考虑空行。

2 个答案:

答案 0 :(得分:1)

我通过使用附加了每个部分的最后一个值的Environment.NewLine来实现此目的。请参阅以下代码:

INI班INIClass.cs

[DllImport("kernel32.dll", EntryPoint = "WritePrivateProfileString", CharSet = CharSet.Unicode)]
private static extern long WriteValueA(string section, string key, string val, string filePath);

public void IniWriteValue(string Section, string Key, string Value)
    {
        WriteValueA(Section, Key, Value, this.path);
    }

现在我打电话给IniWriteValue

INIClass objINI = new INIClass();
objINI.IniWriteValue("Section1", "Key1", Value1 );
objINI.IniWriteValue("Section1", "Key2", Value2 + Environment.NewLine);

objINI.IniWriteValue("Section2", "Key1", Value1 );

结果将如下:

[Section1]
Key1 = Value1
Key2 = Value2

[Section2]
Key1 = Value1

注意:INI文件的物理路径是在班级提供的。

答案 1 :(得分:1)

我在c#(MIT许可证)中完全创建了一个IniParser库

https://github.com/rickyah/ini-parser

也可作为NuGet包

这是heavily configurable;默认行为会根据您的要求在各个部分之间添加一行,但如果您不喜欢,则可以implement your own formatter根据需要格式化数据。格式化程序是最近的功能,如果您最终使用它,请随时提供反馈:)。

例如,要以运行时的格式编写数据,只需要

var data = new IniData();
data["Section1"]["Key1"] = value1;
data["Section1"]["Key2"] = value2;
data["Section2"]["Key1"] = value1;
data["Section2"]["Key2"] = value2;

// Now you can get the ini data as an string
var str = data.ToString();

// or persists it to a file
var fileIniData = new FileIniDataParser();
fileIniData.WriteFile("path/to/file.ini", data);

我希望它可以对你有所帮助。