我的项目需要一个文件,我将存储应该能够被用户读取和修改的键/值对数据.我希望程序只是期望键存在,我想尽快从文件中解析它们.
我可以将它们存储在XML中,但XML是复杂的方式,它需要遍历节点和子节点等等,我想要的只是一些获取文件并生成键值对的类.我希望尽可能少的错误处理,并希望尽可能少的代码完成它.
我可以自己编写类似的类,但我宁愿在框架中学习它不是两次发明轮子.在.NET(3.5)中是否有一些内置的魔术类能够这样做?
MagicClass kv = new MagicClass("Settings.ini"); // It doesn't neccesarily have to be an INI file, it can be any simple key/value pair format. string Value1 = kv.get("Key1"); ...
Kyght.. 7
如果您正在寻找一个快速简单的功能,并且不想使用.Net app\user配置设置文件或担心有时会发生的序列化问题.
以下静态函数可以加载格式为"KEY = VALUE"的文件.
public static DictionaryLoadConfig(string settingfile) { var dic = new Dictionary (); if (File.Exists(settingfile)) { var settingdata = File.ReadAllLines(settingfile); for (var i = 0; i < settingdata.Length; i++) { var setting = settingdata[i]; var sidx = setting.IndexOf("="); if (sidx >= 0) { var skey = setting.Substring(0, sidx); var svalue = setting.Substring(sidx+1); if (!dic.ContainsKey(skey)) { dic.Add(skey, svalue); } } } } return dic; }
注意:我正在使用一个字典,所以键必须是唯一的,这通常是设置的情况.
用法:
var settingfile = AssemblyDirectory + "\\mycustom.setting"; var settingdata = LoadConfig(settingfile); if (settingdata.ContainsKey("lastrundate")) { DateTime lout; String svalue; if (settingdata.TryGetValue("lastrundate", out svalue)) { DateTime.TryParse(svalue, out lout); lastrun = lout; } }
Jb Evain.. 6
我不知道任何内置类来解析ini文件.我在需要时使用了nini.它是根据MIT/X11许可证授权的,因此没有任何问题可以包含在封闭源程序中.
这是非常有用的.因此,如果您有这样格式化的Settings.ini文件:
[Configuration] Name = Jb Evain Phone = +330101010101
使用它就像下面这样简单:
var source = new IniConfigSource ("Settings.ini"); var config = source.Configs ["Configuration"]; string name = config.Get ("Name"); string phone = config.Get ("Phone");
Nicholas Man.. 6
为Key和Value 使用KeyValuePair类,然后使用XMLSerializer将List序列化为磁盘.
这将是我觉得最简单的方法.您不必担心遍历节点.调用Deserialize函数将为您完成.用户可以根据需要编辑文件中的值.
如果您正在寻找一个快速简单的功能,并且不想使用.Net app\user配置设置文件或担心有时会发生的序列化问题.
以下静态函数可以加载格式为"KEY = VALUE"的文件.
public static DictionaryLoadConfig(string settingfile) { var dic = new Dictionary (); if (File.Exists(settingfile)) { var settingdata = File.ReadAllLines(settingfile); for (var i = 0; i < settingdata.Length; i++) { var setting = settingdata[i]; var sidx = setting.IndexOf("="); if (sidx >= 0) { var skey = setting.Substring(0, sidx); var svalue = setting.Substring(sidx+1); if (!dic.ContainsKey(skey)) { dic.Add(skey, svalue); } } } } return dic; }
注意:我正在使用一个字典,所以键必须是唯一的,这通常是设置的情况.
用法:
var settingfile = AssemblyDirectory + "\\mycustom.setting"; var settingdata = LoadConfig(settingfile); if (settingdata.ContainsKey("lastrundate")) { DateTime lout; String svalue; if (settingdata.TryGetValue("lastrundate", out svalue)) { DateTime.TryParse(svalue, out lout); lastrun = lout; } }
我不知道任何内置类来解析ini文件.我在需要时使用了nini.它是根据MIT/X11许可证授权的,因此没有任何问题可以包含在封闭源程序中.
这是非常有用的.因此,如果您有这样格式化的Settings.ini文件:
[Configuration] Name = Jb Evain Phone = +330101010101
使用它就像下面这样简单:
var source = new IniConfigSource ("Settings.ini"); var config = source.Configs ["Configuration"]; string name = config.Get ("Name"); string phone = config.Get ("Phone");
为Key和Value 使用KeyValuePair类,然后使用XMLSerializer将List序列化为磁盘.
这将是我觉得最简单的方法.您不必担心遍历节点.调用Deserialize函数将为您完成.用户可以根据需要编辑文件中的值.