INI文件常用于保存各类设置或本地化文本,大概格式如下:

[Section]
key=value

然而.NET框架似乎并没有提供一个实用的工具来操作它,或许是因为MS想让我们都使用Settings类控制的config文件?
但是出于多种原因,我还是不太喜欢用Settings类以及这个XML格式的config文件。

幸运的是,有两个Win32API可以帮我们完成INI文件的控制:
WritePrivateProfileString
GetPrivateProfileString

但是非常尴尬的是这俩一个能写入中文,另一个却读不好中文。。。

于是只好自己动手丰衣足食了,谨记于此以备日后又有所需:

 abstract class ConfigurationBase
{
public abstract string Path { get; } public abstract string Section { get; } /// <summary>
/// 指定好编码格式就能支持各种语言文字了
/// </summary>
private readonly Encoding encoding = Encoding.UTF8; public void Clear()
{
File.Delete(Path);
} public void Save()
{
File.WriteAllLines(Path, lines.ToArray(), encoding);
} private readonly List<string> lines; protected ConfigurationBase()
{
if (File.Exists(Path))
{
lines = new List<string>(
File.ReadAllLines(Path, encoding));
}
else
{
lines = new List<string>();
}
} protected string Get(string key, string defaultVal)
{
if (lines.Count != )
{
string sectionLine = String.Format("[{0}]", Section);
string keyLine = String.Format("{0}=", key);
Regex otherSection = new Regex(@"^\[[^\]+]\]$", RegexOptions.Compiled); bool inSection = false;
foreach (string line in lines)
{
if (sectionLine == line)
{
inSection = true;
}
else if (otherSection.IsMatch(line))
{
if (inSection) break;
}
else if (inSection && line.StartsWith(keyLine))
{
return line.Substring(keyLine.Length);
}
}
}
return defaultVal;
} protected void Set(string key, string value)
{
string sectionLine = String.Format("[{0}]", Section);
string keyLine = String.Format("{0}=", key);
Regex otherSection = new Regex(@"^\[[^\]+]\]$", RegexOptions.Compiled);
string valueLine = String.Format("{0}{1}", keyLine, value); bool inSection = false;
for (int i = ; i < lines.Count; i++)
{
if (sectionLine == lines[i])
{
inSection = true;
}
else if (otherSection.IsMatch(lines[i]))
{
if (inSection)
{
lines.Insert(i, valueLine);
break;
}
}
else if (inSection && lines[i].StartsWith(keyLine))
{
lines[i] = valueLine;
}
}
if (inSection)
{
lines.Add(valueLine);
}
else
{
lines.Add(sectionLine);
lines.Add(valueLine);
}
}
}

[C#]INI文件控制类的更多相关文章

  1. android操作ini工具类

    package com.smarteye.common; import java.io.BufferedReader; import java.io.BufferedWriter; import ja ...

  2. C# 配置文件ini操作类

    // [ DllImport ( "kernel32" ) ] //private static extern long WritePrivateProfileString ( s ...

  3. 我也分享一个c# ini操作类

    刚刚看了一篇 @云菲菲 的关于基于正则的INI辅助类文章:http://www.cnblogs.com/yunfeifei/p/4081977.html,作者写的不错.还看到评论处有一个的地址:htt ...

  4. C# 读取Ini配置文件类

    配置文件 为fileName.ini 的文件 第一行必须为空,不然读不出值 [section1] key=value key2=value ......... [section2] key=value ...

  5. c#读取INI文件类

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;na ...

  6. 自己写的 读写 ini 配置文件类

    /// <summary> /// 不调用系统API 读写 ini 配置文件 /// </summary> public class RW_ini { #region ==== ...

  7. Ini操作类

    using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...

  8. C# INI配置文件读写类

    ini是一种很古老的配置文件,C#操作ini文件借助windows底层ini操作函数,使用起来很方便: public class IniHelper { [DllImport("kernel ...

  9. C# Ini配置文件

    public class INIUserAccound { static IniFile Ini = new IniFile(AppDomain.CurrentDomain.BaseDirectory ...

随机推荐

  1. 第五章 ReentrantLock源码解析1--获得非公平锁与公平锁lock()

    最常用的方式: int a = 12; //注意:通常情况下,这个会设置成一个类变量,比如说Segement中的段锁与copyOnWriteArrayList中的全局锁 final Reentrant ...

  2. Delphi - 10.1编译OSX10.12程序遇到错误解决了!

    昨天,尝试Delphi的跨平台开发功能,在windows10下,做了一个控制台程序,发布目标平台是OSX10.12,中间配置过程都非常顺利,没有任何错误,但是当编译运行时候出现下面错误: [dccos ...

  3. Exp2 后门原理与实践 20164321 王君陶

    Exp2 后门原理与实践 20164321 王君陶 一.实验内容 基础问题回答: 1.例举你能想到的一个后门进入到你系统中的可能方式? 答:通过漏洞,点击陌生链接,或者浏览不良网页挂马. 2.例举你知 ...

  4. 782. Transform to Chessboard

    An N x N board contains only 0s and 1s. In each move, you can swap any 2 rows with each other, or an ...

  5. Mysql的Text和Blob的比较

    MySQL存在text和blob: (1)相同 在TEXT或BLOB列的存储或检索过程中,不存在大小写转换,当未运行在严格模式时,如果你为BLOB或TEXT列分配一个超过该列类型的最大长度的值,值被截 ...

  6. P1484 种树

    P1484 种树 题意: 在n个数中选出至多k个数,且两两不相邻,并使所选数的和最大. n<=500000  思路 先建一个堆,把所有点扔进去,当取出队首元素时累加到答案时,把它和它左右两个点一 ...

  7. 【7】JMicro微服务-服务路由,负载均衡

    如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl   1.关于服务路由和负载均衡 服务路由:根据预先配置好的策略,为客户端选择一个当前可用的服务提供者,根据策略选择一个可用的 ...

  8. 配置豆瓣镜像作为python 库的下载源

    配置豆瓣镜像作为python 库的下载源 Windows 下如下配置:

  9. Java之IO(一)InputStream和OutputStream

    转载请注明源出处:http://www.cnblogs.com/lighten/p/6964702.html 1.前言 计算机的IO操作一直都是比较重要的一环,IO顾名思义,就是输入输出流.不管是磁盘 ...

  10. springboot自定义错误页面

    springboot自定义错误页面 1.加入配置: @Bean public EmbeddedServletContainerCustomizer containerCustomizer() { re ...