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函数以这样的方式放置/写入部分,或者是否有任何标准的方式来这样做。
如果空白行已经存在,它应该足够聪明,可以考虑空白行。
我通过使用每个部分最后一个值附加的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);
我希望它能对你有所帮助。