在我們日常專案開發中,操作INI/CFG組態檔,往往會通過呼叫WinAPI來實現,WinAPI介面引數只支援字串,而我們專案中,往往資料型別是多種多樣的,在儲存和獲取設定值,我們就要進行型別的轉換。
今天給大家推薦一個操作庫,這個庫就可以解決我們的問題。
這是一個基於.Net開發的簡單、易用的CFG/INI設定操作庫,可以用文字或二進位制格式讀取、修改和儲存組態檔和流,該庫與.NET、.NET Core和Mono Framework完全相容。
跨平臺:這是基於.Netstandard2.0開發的系統,可以部署在Docker,Windows,Linux,Mac。
SharpConfig:設定庫操作專案,Example:使用範例。
檔案載入
Configuration.LoadFromFile("myConfig.cfg"); // 檔案
Configuration.LoadFromStream(myStream); // 文字流
Configuration.LoadFromString(myString); // 文字
Configuration.LoadFromBinaryFile("myConfig.cfg"); // 二進位制
Configuration.LoadFromBinaryStream(myStream); // 二進位制流
檔案儲存
myConfig.SaveToFile("myConfig.cfg"); // 檔案
myConfig.SaveToStream(myStream); // 檔案流
myConfig.SaveToBinaryFile("myConfig.cfg"); // 二進位制檔案
myConfig.SaveToBinaryStream(myStream); // 二進位制流
使用方法
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);
物件操作
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));
組態檔註釋
//獲取包含所有有效註釋分隔字元的陣列。當前值為{「#」,「;」}。
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;}
專案地址
更多開源專案請檢視:一個專注推薦優秀.Net開源專案的榜單
- End -
文章首發於公眾號【程式設計樂趣】,歡迎大家關注。