愚公系列2023年4月.NET CORE工具案例,如何改写SharpConfig配置文件读取库?

2026-03-30 15:261阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1945个文字,预计阅读时间需要8分钟。

愚公系列2023年4月.NET CORE工具案例,如何改写SharpConfig配置文件读取库?

(文章目录)+ 前言 + 在计算机科学领域,配置文件(英文:configuration file,台湾作:設定檔)是一种计算机文件,可为一组计算机程序配置参数和初始设置。+ SharpConfig是一个易于使用的CF配置文件解析器。

(文章目录)


前言

在计算机科学领域,配置文件(英语:configuration file,台湾作设定档)是一种计算机文件,可以为一些计算机程序配置参数和初始设置。

SharpConfig是一个易于使用的CFG/INI配置库,用于.NET。可以使用 SharpConfig 以文本或二进制格式读取、修改和保存配置文件和流。该库与.NET,.NET Core和Mono Framework完全兼容。

SharpConfig官网:github.com/dlemstra/Magick.NET

一、SharpConfig的使用

1.安装包

SharpConfig

2.创建配置文件

[General] # a comment SomeString = Hello World! SomeInteger = 10 # an inline comment SomeFloat = 20.05 SomeBoolean = true SomeArray = { 1, 2, 3 } Day = Monday [Person] Name = Peter Age = 50

3.读取配置文件

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleTest { public class Person { public string Name { get; set; } public int Age { get; set; } } }

using ConsoleTest; using SharpConfig; var config = Configuration.LoadFromFile("sample.cfg"); var section = config["General"]; string someString = section["SomeString"].StringValue; int someInteger = section["SomeInteger"].IntValue; float someFloat = section["SomeFloat"].FloatValue; bool someBool = section["SomeBoolean"].BoolValue; int[] someIntArray = section["SomeArray"].IntValueArray; string[] someStringArray = section["SomeArray"].StringValueArray; DayOfWeek day = section["Day"].GetValue<DayOfWeek>(); // Entire user-defined objects can be created from sections and vice versa. var person = config["Person"].ToObject<Person>(); Console.WriteLine("读取完成");

也可以使用循环读取

foreach (var section in myConfig) { foreach (var setting in section) { // ... } }

4.写入配置文件

写入配置文件以内存为主

// 创建配置文件 using SharpConfig; var myConfig = new Configuration(); // 设置配置文件值 myConfig["Video"]["Width"].IntValue = 1920; myConfig["Video"]["Height"].IntValue = 1080; myConfig["Video"]["Formats"].StringValueArray = new[] { "RGB32", "RGBA32" }; // 读取配置文件 int width = myConfig["Video"]["Width"].IntValue; int height = myConfig["Video"]["Height"].IntValue; string[] formats = myConfig["Video"]["Formats"].StringValueArray; Console.WriteLine("读取完成");

5.加载配置文件

Configuration.LoadFromFile("myConfig.cfg"); // Load from a text-based file. Configuration.LoadFromStream(myStream); // Load from a text-based stream. Configuration.LoadFromString(myString); // Load from text (source code). Configuration.LoadFromBinaryFile("myConfig.cfg"); // Load from a binary file. Configuration.LoadFromBinaryStream(myStream); // Load from a binary stream.

6.保存配置

myConfig.SaveToFile("myConfig.cfg"); // Save to a text-based file. myConfig.SaveToStream(myStream); // Save to a text-based stream. myConfig.SaveToBinaryFile("myConfig.cfg"); // Save to a binary file. myConfig.SaveToBinaryStream(myStream); // Save to a binary stream.

var cfg = new Configuration(); cfg["SomeStructure"]["SomeString"].StringValue = "foobar"; cfg["SomeStructure"]["SomeInt"].IntValue = 2000; cfg["SomeStructure"]["SomeInts"].IntValueArray = new[] { 1, 2, 3 }; cfg["SomeStructure"]["SomeDate"].DateTimeValue = DateTime.Now; cfg.SaveToFile(filename);

7.忽略属性、字段和类型

class SomeClass { public string Name { get; set; } public int Age { get; set; } [SharpConfig.Ignore] public int SomeInt { get; set; } }

SharpConfig 现在在从 SomeClass 类型的对象创建节时将忽略 SomeInt 属性,反之亦然。

8.添加自定义对象转换器

在某些情况下,您可能希望根据特定要求为自定义类型实现转换规则。 这很简单,涉及两个步骤,使用人员示例进行说明:

public class Person { public string Name { get; set; } public int Age { get; set; } }

8.1 创建转换器

using SharpConfig; public class PersonStringConverter : TypeStringConverter<Person> { // This method is responsible for converting a Person object to a string. public override string ConvertToString(object value) { var person = (Person)value; return string.Format("[{0};{1}]", person.Name, person.Age); } // This method is responsible for converting a string to a Person object. public override object ConvertFromString(string value, Type hint) { var split = value.Trim('[', ']').Split(';'); var person = new Person(); person.Name = split[0]; person.Age = int.Parse(split[1]); return person; } }

8.2 注册类型转换

using SharpConfig; Configuration.RegisterTypeStringConverter(new PersonStringConverter());

每当在设置上使用 Person 对象(通过 GetValue() 和 SetValue())时,您的转换器是 选择以处理转换。 这也会自动与数组的 SetValue() 和 GetValueArray() 一起使用。

9.对象和数组操作

//--------------------对象操作-------------------------------- var cfg = new Configuration(); //对象. var p = new SomeClass { SomeString = "foobar", SomeInt = 2000, SomeInts = new[] { 1, 2, 3 }, SomeDate = DateTime.Now }; //设置 cfg.Add(Section.FromObject("SomeStructure", p)); //--------------------数组操作-------------------------------- var cfg = new Configuration();cfg["GeneralSection"]["SomeInts"].IntValueArray = new[] { 1, 2, 3 }; // 获取数组类型值 int[] someIntValuesBack = cfg["GeneralSection"]["SomeInts"].GetValueArray<int>(); float[] sameValuesButFloats = cfg["GeneralSection"]["SomeInts"].GetValueArray<float>(); string[] sameValuesButStrings = cfg["GeneralSection"]["SomeInts"].GetValueArray<string>(); // 获取数组对象 object[] sameValuesButObjects = cfg["GeneralSection"]["SomeInts"].GetValueArray(typeof(int));

10.文件注释

//获取包含所有有效注释分隔字符的数组。当前值为{“#”,“;”}。 Configuration.ValidCommentChars{get;} //获取或设置保存配置时的首选注释字符。默认值为“#”。 Configuration.PreferredCommentChar{get;set;} //获取或设置设置的数组元素分隔符。默认值为“,”。 Configuration.ArrayElementSeparator{get;set;} //获取或设置一个值,该值指示在分析配置时是否应忽略内联注释。 bool Configuration.IgnoreInlineComments{get;set;} //获取或设置一个值,该值指示在分析配置时是否应忽略前置注释。 bool Configuration.IgnorePreComments{get;set;} //获取或设置一个值,该值指示在创建配置时是否应添加等号之间的空格。 bool Configuration.SpaceBetweenEquals{get;set;} //获取或设置一个值,该值指示字符串值是否不带引号,但包括其间的所有内容 bool Configuration.OutputRawStringValues{get;set;}

备注

有时项目有特殊的配置文件或其他需求,例如忽略文件中的所有注释。 为了获得更大的灵活性,可以使用 Configuration 类的静态属性修改 SharpConfig 的行为。 以下属性是当前属性:

1、CultureInfo Configuration.CultureInfo { get; set; }

  • 获取或设置用于 SharpConfig 中的值转换的区域性信息。默认值为CultureInfo.InvariantCulture。

2、 char[] Configuration.ValidCommentChars { get; }

  • 获取包含所有有效注释分隔字符的数组。当前值为 { '#', ';' }。

3、char Configuration.PreferredCommentChar { get; set; }

  • 获取或设置保存配置时的首选注释字符。默认值为“#”。

4、char Configuration.ArrayElementSeparator { get; set; }

  • 获取或设置设置的数组元素分隔符。默认值为“,”。
  • 请记住,在 Set 实例存在时更改此值后,期望其 ArraySize 和其他与数组相关的值返回不同的值。

5、bool Configuration.IgnoreInlineComments { get; set; }

  • 获取或设置一个值,该值指示在分析配置时是否应忽略内联注释。

6、bool Configuration.IgnorePreComments { get; set; }

  • 获取或设置一个值,该值指示在分析配置时是否应忽略预注释。

7、bool Configuration.SpaceBetweenEquals { get; set; }

  • 获取或设置一个值,该值指示在创建配置时是否应添加等于之间的空格。

8、bool Configuration.OutputRawStringValues { get; set; }

愚公系列2023年4月.NET CORE工具案例,如何改写SharpConfig配置文件读取库?

  • 获取或设置一个值,该值指示字符串值是否不带引号,但包括介于两者之间的所有内容。例:
    • 该设置将写入 as 中的文件MySetting=" Example value"MySetting= Example value

本文共计1945个文字,预计阅读时间需要8分钟。

愚公系列2023年4月.NET CORE工具案例,如何改写SharpConfig配置文件读取库?

(文章目录)+ 前言 + 在计算机科学领域,配置文件(英文:configuration file,台湾作:設定檔)是一种计算机文件,可为一组计算机程序配置参数和初始设置。+ SharpConfig是一个易于使用的CF配置文件解析器。

(文章目录)


前言

在计算机科学领域,配置文件(英语:configuration file,台湾作设定档)是一种计算机文件,可以为一些计算机程序配置参数和初始设置。

SharpConfig是一个易于使用的CFG/INI配置库,用于.NET。可以使用 SharpConfig 以文本或二进制格式读取、修改和保存配置文件和流。该库与.NET,.NET Core和Mono Framework完全兼容。

SharpConfig官网:github.com/dlemstra/Magick.NET

一、SharpConfig的使用

1.安装包

SharpConfig

2.创建配置文件

[General] # a comment SomeString = Hello World! SomeInteger = 10 # an inline comment SomeFloat = 20.05 SomeBoolean = true SomeArray = { 1, 2, 3 } Day = Monday [Person] Name = Peter Age = 50

3.读取配置文件

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleTest { public class Person { public string Name { get; set; } public int Age { get; set; } } }

using ConsoleTest; using SharpConfig; var config = Configuration.LoadFromFile("sample.cfg"); var section = config["General"]; string someString = section["SomeString"].StringValue; int someInteger = section["SomeInteger"].IntValue; float someFloat = section["SomeFloat"].FloatValue; bool someBool = section["SomeBoolean"].BoolValue; int[] someIntArray = section["SomeArray"].IntValueArray; string[] someStringArray = section["SomeArray"].StringValueArray; DayOfWeek day = section["Day"].GetValue<DayOfWeek>(); // Entire user-defined objects can be created from sections and vice versa. var person = config["Person"].ToObject<Person>(); Console.WriteLine("读取完成");

也可以使用循环读取

foreach (var section in myConfig) { foreach (var setting in section) { // ... } }

4.写入配置文件

写入配置文件以内存为主

// 创建配置文件 using SharpConfig; var myConfig = new Configuration(); // 设置配置文件值 myConfig["Video"]["Width"].IntValue = 1920; myConfig["Video"]["Height"].IntValue = 1080; myConfig["Video"]["Formats"].StringValueArray = new[] { "RGB32", "RGBA32" }; // 读取配置文件 int width = myConfig["Video"]["Width"].IntValue; int height = myConfig["Video"]["Height"].IntValue; string[] formats = myConfig["Video"]["Formats"].StringValueArray; Console.WriteLine("读取完成");

5.加载配置文件

Configuration.LoadFromFile("myConfig.cfg"); // Load from a text-based file. Configuration.LoadFromStream(myStream); // Load from a text-based stream. Configuration.LoadFromString(myString); // Load from text (source code). Configuration.LoadFromBinaryFile("myConfig.cfg"); // Load from a binary file. Configuration.LoadFromBinaryStream(myStream); // Load from a binary stream.

6.保存配置

myConfig.SaveToFile("myConfig.cfg"); // Save to a text-based file. myConfig.SaveToStream(myStream); // Save to a text-based stream. myConfig.SaveToBinaryFile("myConfig.cfg"); // Save to a binary file. myConfig.SaveToBinaryStream(myStream); // Save to a binary stream.

var cfg = new Configuration(); cfg["SomeStructure"]["SomeString"].StringValue = "foobar"; cfg["SomeStructure"]["SomeInt"].IntValue = 2000; cfg["SomeStructure"]["SomeInts"].IntValueArray = new[] { 1, 2, 3 }; cfg["SomeStructure"]["SomeDate"].DateTimeValue = DateTime.Now; cfg.SaveToFile(filename);

7.忽略属性、字段和类型

class SomeClass { public string Name { get; set; } public int Age { get; set; } [SharpConfig.Ignore] public int SomeInt { get; set; } }

SharpConfig 现在在从 SomeClass 类型的对象创建节时将忽略 SomeInt 属性,反之亦然。

8.添加自定义对象转换器

在某些情况下,您可能希望根据特定要求为自定义类型实现转换规则。 这很简单,涉及两个步骤,使用人员示例进行说明:

public class Person { public string Name { get; set; } public int Age { get; set; } }

8.1 创建转换器

using SharpConfig; public class PersonStringConverter : TypeStringConverter<Person> { // This method is responsible for converting a Person object to a string. public override string ConvertToString(object value) { var person = (Person)value; return string.Format("[{0};{1}]", person.Name, person.Age); } // This method is responsible for converting a string to a Person object. public override object ConvertFromString(string value, Type hint) { var split = value.Trim('[', ']').Split(';'); var person = new Person(); person.Name = split[0]; person.Age = int.Parse(split[1]); return person; } }

8.2 注册类型转换

using SharpConfig; Configuration.RegisterTypeStringConverter(new PersonStringConverter());

每当在设置上使用 Person 对象(通过 GetValue() 和 SetValue())时,您的转换器是 选择以处理转换。 这也会自动与数组的 SetValue() 和 GetValueArray() 一起使用。

9.对象和数组操作

//--------------------对象操作-------------------------------- var cfg = new Configuration(); //对象. var p = new SomeClass { SomeString = "foobar", SomeInt = 2000, SomeInts = new[] { 1, 2, 3 }, SomeDate = DateTime.Now }; //设置 cfg.Add(Section.FromObject("SomeStructure", p)); //--------------------数组操作-------------------------------- var cfg = new Configuration();cfg["GeneralSection"]["SomeInts"].IntValueArray = new[] { 1, 2, 3 }; // 获取数组类型值 int[] someIntValuesBack = cfg["GeneralSection"]["SomeInts"].GetValueArray<int>(); float[] sameValuesButFloats = cfg["GeneralSection"]["SomeInts"].GetValueArray<float>(); string[] sameValuesButStrings = cfg["GeneralSection"]["SomeInts"].GetValueArray<string>(); // 获取数组对象 object[] sameValuesButObjects = cfg["GeneralSection"]["SomeInts"].GetValueArray(typeof(int));

10.文件注释

//获取包含所有有效注释分隔字符的数组。当前值为{“#”,“;”}。 Configuration.ValidCommentChars{get;} //获取或设置保存配置时的首选注释字符。默认值为“#”。 Configuration.PreferredCommentChar{get;set;} //获取或设置设置的数组元素分隔符。默认值为“,”。 Configuration.ArrayElementSeparator{get;set;} //获取或设置一个值,该值指示在分析配置时是否应忽略内联注释。 bool Configuration.IgnoreInlineComments{get;set;} //获取或设置一个值,该值指示在分析配置时是否应忽略前置注释。 bool Configuration.IgnorePreComments{get;set;} //获取或设置一个值,该值指示在创建配置时是否应添加等号之间的空格。 bool Configuration.SpaceBetweenEquals{get;set;} //获取或设置一个值,该值指示字符串值是否不带引号,但包括其间的所有内容 bool Configuration.OutputRawStringValues{get;set;}

备注

有时项目有特殊的配置文件或其他需求,例如忽略文件中的所有注释。 为了获得更大的灵活性,可以使用 Configuration 类的静态属性修改 SharpConfig 的行为。 以下属性是当前属性:

1、CultureInfo Configuration.CultureInfo { get; set; }

  • 获取或设置用于 SharpConfig 中的值转换的区域性信息。默认值为CultureInfo.InvariantCulture。

2、 char[] Configuration.ValidCommentChars { get; }

  • 获取包含所有有效注释分隔字符的数组。当前值为 { '#', ';' }。

3、char Configuration.PreferredCommentChar { get; set; }

  • 获取或设置保存配置时的首选注释字符。默认值为“#”。

4、char Configuration.ArrayElementSeparator { get; set; }

  • 获取或设置设置的数组元素分隔符。默认值为“,”。
  • 请记住,在 Set 实例存在时更改此值后,期望其 ArraySize 和其他与数组相关的值返回不同的值。

5、bool Configuration.IgnoreInlineComments { get; set; }

  • 获取或设置一个值,该值指示在分析配置时是否应忽略内联注释。

6、bool Configuration.IgnorePreComments { get; set; }

  • 获取或设置一个值,该值指示在分析配置时是否应忽略预注释。

7、bool Configuration.SpaceBetweenEquals { get; set; }

  • 获取或设置一个值,该值指示在创建配置时是否应添加等于之间的空格。

8、bool Configuration.OutputRawStringValues { get; set; }

愚公系列2023年4月.NET CORE工具案例,如何改写SharpConfig配置文件读取库?

  • 获取或设置一个值,该值指示字符串值是否不带引号,但包括介于两者之间的所有内容。例:
    • 该设置将写入 as 中的文件MySetting=" Example value"MySetting= Example value