Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# INI中的每个部分应以空行分隔_C#_Ini - Fatal编程技术网

C# INI中的每个部分应以空行分隔

C# INI中的每个部分应以空行分隔,c#,ini,C#,Ini,我正在使用WritePrivateProfileStringkernal32函数写入INI文件 但当我写入INI文件时,该部分仅如下所示 [Section1] Key1 = value1 key2 = value2 [Section2] Key1 = value1 key2 = value2 现在,我正在寻找解决方案,以单独的部分如下 [Section1] Key1 = value1 key2 = value2 [Section2] Key1 = value1 key2 = value2

我正在使用
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函数以这种方式放置/写入节,或者是否有任何标准的方法来执行相同的操作


<> P>>如果已经存在空格,应该足够聪明。

< P>我已经通过使用<代码>环境。请参阅以下代码:

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);
    }
现在是我调用
InWriteValue
时的部分

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库

也可以作为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);

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

你到底为什么要关心这个?INI文件不是被设计成漂亮的,它们被设计成实用的。“如果已经存在的话,它应该足够智能来考虑空白行。”你的解决方案符合这个标准吗?不。这就是为什么我提到“我是如何做到这一点”的。这可能对海报有帮助。Hi@Hassansar:谢谢,但这对我没有帮助,添加换行符会在每次运行时添加额外的空行,在我的情况下,我永远不知道我将要编写的最后一个键,因为它基于运行时可用的数据。我需要的东西,应该准确地确定部分和增加额外的行后,每个部分,如果不存在。(可能是我需要进行的手动C#编码)您是否选中了
GetPrivateProfileSection()
?此函数
检索初始化文件指定部分的所有键和值。
但仍需要遍历所有部分。此链接可能会有所帮助。