c#读写ini配置文件示例
其他人写的都是调用非托管kernel32.dll。我也用过但是感觉兼容性有点不好有时候会出现编码错误,毕竟一个是以前的系统一个是现在的系统。咱来写一个纯C#的ini格式配置文件读取,其实就是文本文件读写啦。但是我们要做的绝不仅仅是这样是为了访问操作的方便更是为了以后的使用。
都知道ini格式的配置文件里各个配置项其实就是一行一行的文本key跟value用等号隔开。
像这样:
grade=5。
各个配置项又进行分组同类型的放到一起称之为section以中括号([])区分。
像这样:
[contact]
qq=410910748
website=assassinx.cnblogs.com
[score]
math=85
Chinese=90
geographic=60
各个配置项的key在section内不可重复。
在这里我们为了方便去掉section的概念,实际上也用不怎么到。那么这样一来就可以把个个配置项理解成一个dictionary结构,方便我们存取等操作。至于为什么一定要使用dictionary因为在测试时我发现存取过程中他不会打乱元素的存放顺序晕就这样啊。我们要做到就是根据key去取value。还有就是需要注意到我们有时候需要在配置文件里写注释怎么办呢?就是以分号(;)开头的行。这个问题我们可以在程序里为他初始化特殊的key+序号的形式,写入的时候也同样的进行判断。
这整个过程就是:
程序开始时遍历所有行如果以分号(;)开头则存储此行不作为配置解释,如果不是则解释此行并放到dictionary集合里去。访问时根据key获取value就这么简单。注意注释行的处理 还有更改配置存回去行的先后顺序必须保持原样。
好了开工吧:
publicclassConfig
{
publicDictionary<string,string>configData;
stringfullFileName;
publicConfig(string_fileName)
{
configData=newDictionary<string,string>();
fullFileName=Application.StartupPath+@"\"+_fileName;
boolhasCfgFile=File.Exists(Application.StartupPath+@"\"+_fileName);
if(hasCfgFile==false)
{
StreamWriterwriter=newStreamWriter(File.Create(Application.StartupPath+@"\"+_fileName),Encoding.Default);
writer.Close();
}
StreamReaderreader=newStreamReader(Application.StartupPath+@"\"+_fileName,Encoding.Default);
stringline;
intindx=0;
while((line=reader.ReadLine())!=null)
{
if(line.StartsWith(";")||string.IsNullOrEmpty(line))
configData.Add(";"+indx++,line);
else
{
string[]key_value=line.Split("=");
if(key_value.Length>=2)
configData.Add(key_value[0],key_value[1]);
else
configData.Add(";"+indx++,line);
}
}
reader.Close();
}
publicstringget(stringkey)
{
if(configData.Count<=0)
returnnull;
elseif(configData.ContainsKey(key))
returnconfigData[key].ToString();
else
returnnull;
}
publicvoidset(stringkey,stringvalue)
{
if(configData.ContainsKey(key))
configData[key]=value;
else
configData.Add(key,value);
}
publicvoidsave()
{
StreamWriterwriter=newStreamWriter(fullFileName,false,Encoding.Default);
IDictionaryEnumeratorenu=configData.GetEnumerator();
while(enu.MoveNext())
{
if(enu.Key.ToString().StartsWith(";"))
writer.WriteLine(enu.Value);
else
writer.WriteLine(enu.Key+"="+enu.Value);
}
writer.Close();
}
}
相关文章
- C#Random()函数详解「建议收藏」
- c#面试题抽象类和接口的区别-金三银四面试:C#程序员经常遇到的30道基础面试题,想你所想
- 【Unity3D】Unity 脚本 ③ ( C# 脚本的执行入口函数 | 获取当前游戏物体及物体名称 | 获取游戏物体的 Transform 组件数据 | UnityEngine 命名空间简介 )
- C驱动MySQL 获得连接串的正确方式(c# mysql 连接串)
- C#怎样才能实现窗体最小化到托盘呢?
- ASP.net验证码实现代码(C#)
- 使用c#构造date数据类型
- C#三种判断数据库中取出的字段值是否为空(NULL)的方法
- Question:基于C#连续赋值的面试题介绍
- 浅析C#web访问mysql数据库-整理归纳总结
- C#灰度化图像的实例代码
- c#瀛?绗︿覆?肩被??涓?寮??ㄧ被??姣?杈?绀轰?
- C#针对xml基本操作及保存配置文件应用实例
- C#使用smtp发送带附件的邮件实现方法
- C#与js实现去除textbox文本框里面重复记录的方法
- C#观察者模式(ObserverPattern)实例教程