/// <summary>
/// 不调用系统API 读写 ini 配置文件
/// </summary>
public class RW_ini
{
#region ========ini 读写========
// 首次调用 RWini 时需要初始化此参数
public static string pathIni;
// 记录错误信息 与 WriteLog 一起使用
public static string pathErr; public static string ReadIni(string section, string key)
{
string result = "";
try
{
// 文件存在
if (File.Exists(pathIni))
{
//读取INI文件
string buffer;
string[] temp;
using (StreamReader sr = new StreamReader(pathIni, Encoding.Default))
{
while (sr.Peek() >= )
{
buffer = sr.ReadLine().Trim();
if (!string.IsNullOrEmpty(buffer) && buffer.StartsWith(string.Format("[{0}]", section), StringComparison.OrdinalIgnoreCase))
{
while (sr.Peek() > )
{
buffer = sr.ReadLine().Trim();
if (!string.IsNullOrEmpty(buffer))
{
if (buffer.StartsWith("["))
break;
if (!buffer.StartsWith(";"))
{
temp = buffer.Split('=');
if (temp.Length > && temp[].TrimEnd().Equals(key, StringComparison.OrdinalIgnoreCase))
{
return temp[].TrimStart();
}
}
}
}
// 不再判断下一个节点
return result;
}
}
}
}
// 不再判断下一个节点
return result;
}
catch
{
throw new ApplicationException("同步文件读取异常!");
}
} private void WriteIni(string section, string key, string value)
{
try
{
// 文件不存在则创建
if (!File.Exists(pathIni))
{
File.Create(pathIni);
}
// 修改INI文件
bool modify = false, find = false;
string buffer;
List<string> temp = new List<string>();
// 将所有配置文件放到集合中
using (StreamReader sr = new StreamReader(pathIni, Encoding.Default))
{
while (sr.Peek() >= )
{
buffer = sr.ReadLine().Trim();
temp.Add(buffer); if (!modify && !string.IsNullOrEmpty(buffer) && buffer.StartsWith(string.Format("[{0}]", section), StringComparison.OrdinalIgnoreCase))
{
find = true;
while (sr.Peek() >= )
{
buffer = sr.ReadLine().Trim();
temp.Add(buffer);
if (!string.IsNullOrEmpty(buffer))
{
if (buffer.StartsWith("["))
break;
if (!modify && !buffer.StartsWith(";") && buffer.Split('=')[].TrimEnd() == key)
{
modify = true;
temp.RemoveAt(temp.Count - );
if (value != null)
{
temp.Add(string.Format("{0} = {1}", key, value));
}
}
}
} if (!modify)
{
temp.Insert(temp.Count - , string.Format("{0} = {1}", key, value));
}
}
}
if (!modify && !find)
{
temp.Add(string.Format("[{0}]", section));
temp.Add(string.Format("{0} = {1}", key, value));
}
}
using (StreamWriter sw = new StreamWriter(pathIni, false, Encoding.Default))
{
foreach (string item in temp)
sw.WriteLine(item);
}
}
catch
{
throw new ApplicationException("同步文件写入异常!");
}
} public static void WriteLog(string content)
{
File.AppendText(pathErr).WriteLine("时间:{0} 信息:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm"), content);
}
}

因为 WinCE 不带读写 ini 的API 而且自己用的配置文件节点并不多

因此自己编写此类 用于 WinCE 系统中。C# 代码

自己写的 读写 ini 配置文件类的更多相关文章

  1. 引用“kernel32”读写ini配置文件

    引用"kernel32"读写ini配置文件 unity ini kernel32 配置文件  引用"kernel32"读写ini配置文件 OverView ke ...

  2. C# 文件的一些基本操作(转)//用C#读写ini配置文件

    C# 文件的一些基本操作 2009-07-19  来自:博客园  字体大小:[大 中 小] 摘要:介绍C#对文件的一些基本操作,读写等. using System;using System.IO;us ...

  3. 使用C#读写ini配置文件

    INI就是扩展名为"INI"的文件,其实他本身是个文本文件,可以用记事本打工,主要存放的是用户所做的选择或系统的各种参数. INI文件其实并不是普通的文本文件.它有自己的结构.由若 ...

  4. C# 读写 ini 配置文件

    虽说 XML 文件越发流行,但精简的 ini 配置文件还是经常会用到,在此留个脚印. 当然,文中只是调用系统API,不会报错,如有必要,也可以直接以流形式读取 ini文件并解析. /// <su ...

  5. C#操作读写INI配置文件

    一个完整的INI文件格式由节(section).键(key).值(value)组成.示例如:[section]key1=value1key2=value2; 备注:value的值不要太长,理论上最多不 ...

  6. [转]VB 读写ini 配置文件

    转自 百度知道 C# 读写 ini配置文件 点此链接 'API 声明Public Declare Function GetPrivateProfileString Lib "kernel32 ...

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

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

  8. C++读写ini配置文件GetPrivateProfileString()&WritePrivateProfileString()

    转载: 1.https://blog.csdn.net/fengbingchun/article/details/6075716 2. 转自:http://hi.baidu.com/andywangc ...

  9. QT读写ini配置文件

        /********下面是写ini文件*************************/     //Qt中使用QSettings类读写ini文件     //QSettings构造函数的第一 ...

随机推荐

  1. vector中erase用法注意事项

    以前就发现了vector中的erase方法有些诡异(^_^),稍不注意,就会出错.今天又一次遇到了,就索性总结一下,尤其是在循环体中用erase时,由于vector.begin() 和vector.e ...

  2. CDMA学习

    1.关于RC:http://www.mscbsc.com/askpro/question74915 2.CDMA知识要点:http://wenku.baidu.com/view/d4511442a89 ...

  3. 关闭所有的screen

    由于开了很多个screen同时工作,关闭是一个一个比较麻烦,写个命令在这以便日后想不起来时可以用到.1.先看看有多少个screen screen -ls |awk '/Socket/'|awk '{p ...

  4. LMS算法

    一.感知器算法和LMS算法 感知器和自适应线性元件在历史上几乎是同时提出的,并且两者在对权值的调整的算法非常相似.它们都是基于纠错学习规则的学习算法. 感知器算法存在如下问题:不能推广到一般的前向网络 ...

  5. OK335xS canutils deal with compile error

    /************************************************************************************** * OK335xS ca ...

  6. 共享仓库,远程仓库,多人协作,github操作

    1.共享仓库: 创建共享仓库 1.创建文件夹 mkdir file 2.设置文件夹属主 chown tarena:tarena file 3.将该文件夹设置为可共享的git仓库 cd file git ...

  7. 猎豹免费WiFi-随身WiFi共享热点,永久免费的无线路由器 - imsoft.cnblogs

  8. python入门20180717-迭代器、生成器和协程

    迭代器.生成器和协程 python中任意的对象,只要它定义了可以返回一个迭代器的__iter__方法,或者支持下标索引的_getitem_方法,那么它就是一个可迭代对象. 可迭代的对象不一定就是迭代器 ...

  9. adb学习笔记

    一.adb实现原理 adb的目的是想仅在PC端执行adb操作来获取手机里面的文件或向手机内部发送文件.这是通过Ubuntu中adb操作作为客户端与Ubuntu中运行的adb service交互,Ubu ...

  10. socat 广播以及多播

    官方文档有一个关于组播,多播的例子挺不错,记录下 多播客户端以及服务器 注意地址修改为自己的网络 server socat UDP4-RECVFROM:6666,ip-add-membership=2 ...