« 上一篇下一篇 »

c#中 使用 INIParser 操作ini文件

我们开发系统难免需要保存配置,有时候我们就使用了ini保存配置值

INIParser 是 C#zhong中保存ini文件的一个扩展项目

基础应用

此页面将显示代码示例,这些示例将帮助您使用此解析器读取INI文件的内容。请参阅配置页面以了解如何在解析文件时更改。

INI文件结构
各个部分的INI文件const,每个定义一个唯一的键,并为每个键分配一个唯一的值。
节被声明为包含在方括号中的唯一单词。方括号内的空格将被忽略,但必须使用唯一的单词([sampleSection])定义该部分

在部分中,我们可以定义具有唯一值的键。键在同一部分中必须唯一,但在不同部分中可以具有相同的键名称。使用等号分配键(键=值)

另外,我们可以使用分号(;)定义单行注释。

因此,可以这样编写一个简单的INI文件:

[ section ];comment
key = value123

细节

所有代码示例均期望以下using子句:

using IniParser;
using IniParser.Model;

首先要做的是创建一个INI解析器的实例

//创建一个ini文件解析器的实例
var parser = new IniDataParser();

ini解析器只能使用字符串中的INI数据,因此,如果要解析文件或获取ini数据,则可以使用提供的一些帮助器类(FileIniParser或StreamIniParser),或者仅从任何源读取ini数据源自己作为字符串,然后使用IniDataParser.Parse方法。

// 使用FileIniDataParser实例轻松解析或持久保存ini文件。
var parser = new FileIniDataParser();

现在,我们可以使用ReadFile解析器对象中的Method获取INI数据。这将返回一个新IniData实例,其中包含从INI文件解析的所有数据:

var parser = new FileIniDataParser();// 这将加载INI文件,读取失败中包含的数据,并解析该数据
IniData data = parser.ReadFile("TestIniFile.ini");

ini文件中的所有节都由表示SectionDataCollection,这不过是SectionData实例的集合。每个SectionData字符串都包含一个带有该部分名称的字符串,一个包含与该部分关联的注释的字符串列表以及该部分中的键列表。该列表由实例KeyDataCollection集合表示KeyData。

存取资料

由于实现了DataCollection类型,IEnumerator因此可以使用for each循环来迭代数据:

//通过所有的段迭代foreach (SectionData section in data.Sections){
Console.WriteLine("[" + section.Name + "]");
   
//遍历当前节中的所有键以打印值
foreach(KeyData key in section.Keys)
     Console.WriteLine(key.Name + " = " + key.Value);}123456789

直接访问

如果知道所需部分的名称和键,则可以直接访问数据

//此行从“ GeneralConfiguration”部分获取
SectionData KeyDataCollection keyCol = data["GeneralConfiguration"];

//此行从“generalconfiguration”部分定义的键“setupdate”获取keydatastring 
directValue = keyCol["setUpdate"];

//但是一口气获取值更容易:
directValue = data["GeneralConfiguration"]["setUpdate"];12345678

解析的数据也可以轻松地修改:

data["GeneralConfiguration"]["setUpdate"] = "150";1

添加或删除节或键

您可以通过编程方式添加或删除部分和/或键/值对:

var parser = new FileIniDataParser();
IniData data = parser.ReadFile("TestIniFile.ini");

//添加一个新部分和一些键
data.Sections.AddSection("newSection");
data["newSection"].AddKey("newKey1", "value1");
data["newSection"].AddKey("newKey2", "value5");

//删除最后一个键
data["newSection"].RemoveKey("newKey2");

//从文件中删除“Users”部分以及与之关联的所有键和注释
data.Sections.RemoveSection("Users");

保存文件

如果您对已解析的数据进行了修改,或者创建了一个新IniData实例并填充了它,则可能希望将数据保存到文件中。为此,只需使用FileIniDataParser实例中的“ SaveFile”方法:

var parser = new FileIniDataParser();

//获取数据
IniData parsedINIDataToBeSaved;

//保存文件
parser.WriteFile("newINIfile.ini", parsedINIDataToBeSaved);

您也可以使用IniData.ToString()方法创建包含ini文件内容的字符串。

  IniData data = new IniData();

  data["Section1"]["key1"] = "value1";

  Console.WriteLine(data.ToString());12345


这是IIniParserConfiguration接口规范中定义的配置选项的列表:

类型描述名称
boolAllowCreateSectionsOnFly如果为true,如果您尝试将键添加到不存在的部分,则该部分将自动动态创建,而不会引发异常。默认为false。
boolAllowDuplicateKeys如果在某节中找到重复的键,这是false解析器将因错误而停止。如果它是true重复键的值,则将是分配给键的最后一个值。默认为false。
boolAllowDuplicateSections如果设置为,false并且找到重复的部分,则解析器将停止并显示错误。如果设置为true,则文件中允许使用重复的节,但是将仅SectionData在IniData.Sections集合中创建一个元素,从而有效地合并相同名称的重复节中的所有键。默认为false。
boolAllowKeysWithoutSection允许文件中有不属于任何部分的键。即允许在定义部分之前定义键。如果设置为,false并且定义了没有节的键,则解析器将因错误而停止。默认为true。
stringAssigmentSpacer设置KeyValuesAssignmentString之前和之后的字符串。默认为字符串“”
RegexCommentRegex用于匹配注释字符串的正则表达式
charCommentString设置将定义注释开头的字符串。注释从注释字符到行尾。默认为“#”
charKeyValueAssigmentString设置将值的分配与键分开的字符串。默认为“ =”
boolOverrideDuplicateKeys仅适用,如果AllowDuplicateKeys是true。如果设置为true当解析器发现重复的键时,它将覆盖先前的值,因此该键将始终包含文件中读取的最后一个键的值。如果设置为false第一个读取的值,则保留该键,因此该键将始终包含文件中读取的第一个键的值。默认为false。
charSectionEndString设置定义节名结尾的字符串。默认为“]”
RegexrRegex用于匹配部分字符串的正则表达式
charSectionStartString设置定义节名称开头的字符串。默认为“ [”
boolSkipInvalidLines如果设置为true,则当解析器发现无效行时,它只会跳过该行,而不是ParseException在解析时抛出a 或返回null(如果由于将属性ThrowExceptionsOnError设置为false,则禁用了异常)。默认为false
boolThrowExceptionsOnError如果true发现错误,解析器将引发异常。如果false解析器将仅停止执行并返回一个null值作为结果。默认为true。
stringNewLineStr用作NewLine的字符串。仅在从IniData结构创建ini字符串时使用,使用IIniDataFormatter。例如,这允许在Windows上使用类unix的结尾字符串创建ini文件。默认值是用于执行此库的系统的正确的换行符/字符串。

如果需要细粒度的自定义进行解析,则可以从中创建派生类IniDataParser并覆盖某些方法。请参见修改解析器页面

本文引用:https://blog.csdn.net/FliesOfTime/article/details/101695051