Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1087235
  • 博文数量: 282
  • 博客积分: 10865
  • 博客等级: 上将
  • 技术积分: 2480
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-12 12:35
文章存档

2017年(1)

2016年(3)

2015年(10)

2014年(12)

2013年(5)

2012年(10)

2011年(29)

2010年(3)

2008年(13)

2007年(92)

2006年(104)

我的朋友

分类: 嵌入式

2011-10-29 20:30:58

using System;

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

namespace SJAnalyzer //我的空间命名,你可以需要改一下。
{
    class ceIniFiles
    {
        string IniFileName;
        char[] TrimChar ={ ' ', '\t' };

        public ceIniFiles(string IniF)
        {

            IniFileName = IniF;
        }

        public string[] GetSects()
        {
            string[] Sects=null;
           
            if (File.Exists(IniFileName))
            {
                string str;
                ArrayList ls = new ArrayList();
                TextReader tr = File.OpenText(IniFileName);
                while ((str = tr.ReadLine()) != null)
                {
                    str = str.Trim();
                    if ((str.StartsWith("[")) && (str.EndsWith("]")))
                        ls.Add(str);                   
                }
                tr.Close();

                if (ls.Count > 0)
                {
                    Sects =new string[ls.Count];
                    for ( int i=0;i
                    {
                        Sects[i] = ls[i].ToString();                      
                    }
                }
            }

            return Sects;
        }

        public int WriteString(string sect, string keystr, string valuestr)
        {
            ArrayList ls = new ArrayList();
            bool SectOK = false;
            bool SetOK = false;

            if (File.Exists(IniFileName))
            {
                int pos1;
                string substr;
                string str;
                TextReader tr = File.OpenText(IniFileName);
                while ((str = tr.ReadLine()) != null)
                {
                    ls.Add(str);
                }
                tr.Close();

                //开始寻找关键字,如果找不到,则在这段的最后一行插入,然后再整体的保存一下INI文件。
                for (int i = 0; i < ls.Count; i++)
                {
                    str = ls[i].ToString();

                    if (str.StartsWith("[") && SectOK) //先判断是否到下一段中了,如果本来就是最后一段,那就有可能永远也不会发生了。
                    {
                        SetOK = true; //如果在这一段中没有找到,并且已经要进入下一段了,就直接在这一段末添加了。
                        ls.Insert(i, keystr.Trim() + "=" + valuestr);
                        break;//如果到下一段了,则直接退出就好。
                    }
                    if (SectOK)
                    {
                        pos1 = str.IndexOf("=");
                        if (pos1 > 1)
                        {
                            substr = str.Substring(0, pos1);
                            substr.Trim(TrimChar);
                            //如果在这一段中找到KEY了,直接修改就好了。
                            if (substr.Equals(keystr, StringComparison.OrdinalIgnoreCase) && SectOK) //是在此段中,并且KEYSTR前段也能匹配上。
                            {
                                SetOK = true;
                                ls[i] = keystr.Trim() + "=" + valuestr;
                                break;
                            }
                        }
                    }

                    if (str.StartsWith("[" + sect + "]")) //判断是否到需要的段中了。
                        SectOK = true;
                }

                if (SetOK == false)
                {
                    SetOK = true;
                    if (!SectOK) //如果没有找到段,则需要再添加段。
                    {
                        ls.Add("[" + sect + "]");
                    }
                    ls.Add(keystr.Trim() + "=" + valuestr);
                }
            } //如果文件不存在,则需要建立文件。
            else
            {
                ls.Clear();
                ls.Add("##文件创建:" + DateTime.Now.ToString() + "##");
                ls.Add("[" + sect + "]");
                ls.Add(keystr.Trim() + "=" + valuestr);
            }

            if (File.Exists(IniFileName)) //删除源文件。
            {
                File.Delete(IniFileName);
            }

            TextWriter tw= File.CreateText(IniFileName);

            //string[] strList = new string[ls.Count];

            for (int i = 0; i < ls.Count; i++)
            {
                //strList[i] = ls[i].ToString();
                tw.WriteLine(ls[i].ToString());
            }
            tw.Flush();
            tw.Close();

            //File.WriteAllLines(IniFileName, strList);
            return 0;
        }

        public string ReadString(string sect, string keystr, string defaultstr)
        {
            string retstr = defaultstr;
            if (File.Exists(IniFileName))
            {
                bool SectOK = false;
                int pos1;
                string substr;
                string str;                               
                ArrayList ls = new ArrayList();
                TextReader tr = File.OpenText(IniFileName);
                while ((str = tr.ReadLine()) != null)
                {
                    str = str.Trim();
                    if (str.StartsWith("[") && SectOK) //先判断是否到下一段中了。
                    {
                        break;//如果到下一段了,则直接退出就好。
                    }
                    if (SectOK)
                    {
                        pos1 = str.IndexOf("=");
                        if (pos1 > 1)
                        {
                            substr = str.Substring(0, pos1);
                            substr.Trim(TrimChar);

                            if (substr.Equals(keystr, StringComparison.OrdinalIgnoreCase)) //是在此段中,并且KEYSTR前段也能匹配上。
                            {
                                retstr = str.Substring(pos1 + 1 ).Trim(TrimChar) ;
                                break;
                            }
                        }
                    }

                    if (str.StartsWith("[" + sect + "]")) //判断是否到需要的段中了。
                        SectOK = true;

                }
                tr.Close();
            }

            return retstr;
        }

        //读整数 
        public int ReadInteger(string Section, string Ident, int Default)
        {
            string intStr = ReadString(Section, Ident, Convert.ToString(Default));
            try
            {
                return Convert.ToInt32(intStr);
            }
            catch
            {
                return Default;
            }
        }


        //写整数 
        public void WriteInteger(string Section, string Ident, int Value)
        {
            WriteString(Section, Ident, Value.ToString());
        }


        //读布尔 
        public bool ReadBool(string Section, string Ident, bool Default)
        {
            try
            {
                return Convert.ToBoolean(ReadString(Section, Ident, Convert.ToString(Default)));
            }
            catch
            {
                return Default;
            }
        }

        //写Bool 
        public void WriteBool(string Section, string Ident, bool Value)
        {
            WriteString(Section, Ident, Convert.ToString(Value));
        }


        /////////////////////////////////////////////////////////////////////////
        //使用此INI文件的特例(自己使用)
        public string GetParam(string KeyStr, string Default)
        {
            string str;
            str = this.ReadString("Params", KeyStr, "???");
            if (str=="???")
            {
                this.WriteString("Params",KeyStr,Default);
                str = Default;
            }
            return str ;
        }

        public void UpdateParam(string KeyStr, string ValueStr)
        {
            this.WriteString("Params", KeyStr, ValueStr);
        }
    }
}


阅读(1095) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~