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

本文关键字:分隔 个部 INI | 更新日期: 2023-09-27 17:59:05

我正在使用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函数以这样的方式放置/写入部分,或者是否有任何标准的方式来这样做。

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

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

我通过使用每个部分最后一个值附加的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文件的物理路径是在类级别提供的。

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

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

也可作为NuGet包提供

它具有很强的可配置性;默认行为会根据您的要求在节之间添加一行,但如果您不喜欢,可以实现自己的格式化程序来格式化数据以满足您的需要。格式化程序是最近的一项功能,如果你最终使用了它,请随时提供反馈:)。

例如,要在运行时以示例的格式写入数据,只需要执行

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);

我希望它能对你有所帮助。