我使用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函数以这种方式放置/写入部分,或者以任何标准方式执行相同操作。
如果已经存在,它应该足够聪明以考虑空行。
答案 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);
我希望它可以对你有所帮助。