我们开发系统难免需要保存配置,有时候我们就使用了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接口规范中定义的配置选项的列表:
类型 | 描述 | 名称 |
---|
bool | AllowCreateSectionsOnFly | 如果为true,如果您尝试将键添加到不存在的部分,则该部分将自动动态创建,而不会引发异常。默认为false。 |
bool | AllowDuplicateKeys | 如果在某节中找到重复的键,这是false解析器将因错误而停止。如果它是true重复键的值,则将是分配给键的最后一个值。默认为false。 |
bool | AllowDuplicateSections | 如果设置为,false并且找到重复的部分,则解析器将停止并显示错误。如果设置为true,则文件中允许使用重复的节,但是将仅SectionData在IniData.Sections集合中创建一个元素,从而有效地合并相同名称的重复节中的所有键。默认为false。 |
bool | AllowKeysWithoutSection | 允许文件中有不属于任何部分的键。即允许在定义部分之前定义键。如果设置为,false并且定义了没有节的键,则解析器将因错误而停止。默认为true。 |
string | AssigmentSpacer | 设置KeyValuesAssignmentString之前和之后的字符串。默认为字符串“” |
Regex | CommentRegex | 用于匹配注释字符串的正则表达式 |
char | CommentString | 设置将定义注释开头的字符串。注释从注释字符到行尾。默认为“#” |
char | KeyValueAssigmentString | 设置将值的分配与键分开的字符串。默认为“ =” |
bool | OverrideDuplicateKeys | 仅适用,如果AllowDuplicateKeys是true。如果设置为true当解析器发现重复的键时,它将覆盖先前的值,因此该键将始终包含文件中读取的最后一个键的值。如果设置为false第一个读取的值,则保留该键,因此该键将始终包含文件中读取的第一个键的值。默认为false。 |
char | SectionEndString | 设置定义节名结尾的字符串。默认为“]” |
Regexr | Regex | 用于匹配部分字符串的正则表达式 |
char | SectionStartString | 设置定义节名称开头的字符串。默认为“ [” |
bool | SkipInvalidLines | 如果设置为true,则当解析器发现无效行时,它只会跳过该行,而不是ParseException在解析时抛出a 或返回null(如果由于将属性ThrowExceptionsOnError设置为false,则禁用了异常)。默认为false |
bool | ThrowExceptionsOnError | 如果true发现错误,解析器将引发异常。如果false解析器将仅停止执行并返回一个null值作为结果。默认为true。 |
string | NewLineStr | 用作NewLine的字符串。仅在从IniData结构创建ini字符串时使用,使用IIniDataFormatter。例如,这允许在Windows上使用类unix的结尾字符串创建ini文件。默认值是用于执行此库的系统的正确的换行符/字符串。 |
如果需要细粒度的自定义进行解析,则可以从中创建派生类IniDataParser并覆盖某些方法。请参见修改解析器页面
本文引用:https://blog.csdn.net/FliesOfTime/article/details/101695051