读写ini文件

using System;
using System.IO;
using System.Text;
using System.Configuration;
using System.Runtime.InteropServices;
using System.Collections.Specialized;
using System.Collections;

using System.Collections.Generic;

/**//// <summary>
/// Summary description for IniFile
/// </summary>

namespace NativeWifi {

     /**//// <summary>
     /// 用于处理INI文件的类
     /// </summary>
     public class INIFile
     {

         // 说明:INI文件的名称必须使用绝对路径,原文如下 by DTY 09.4.15
         //If the lpFileName parameter does not contain a full path and file name for the file,
         //WritePrivateProfileString searches the Windows directory for the file.  
         //If the file does not exist,this function creates the file in the Windows directory.  
         string _FileName;       
 
         #region 导入DLL函数
         //[DllImport("kernel32.dll")]
 //        private extern static int GetPrivateProfileIntA(string segName, string keyName, int iDefault, string fileName);
         [DllImport("kernel32.dll")]
         public extern static int GetPrivateProfileString(string segName, string keyName, string sDefault, StringBuilder buffer, int nSize, string fileName);
         [DllImport("kernel32.dll")]
         //public extern static int GetPrivateProfileStringA(string segName, string keyName, string sDefault, string buffer, int nSize, string fileName);
         public extern static int GetPrivateProfileStringA(string segName, string keyName, string sDefault, byte[] buffer, int iLen, string fileName);
         [DllImport("kernel32.dll")]
         public extern static int GetPrivateProfileSection(string segName, StringBuilder buffer, int nSize, string fileName);
         [DllImport("kernel32.dll")]
         public extern static int WritePrivateProfileSection(string segName, string sValue, string fileName);
         [DllImport("kernel32.dll")]
         public extern static int WritePrivateProfileString(string segName, string keyName, string sValue, string fileName);
         [DllImport("kernel32.dll")]
         public extern static int GetPrivateProfileSectionNamesA(byte[] buffer, int iLen, string fileName);
         #endregion
 
         public INIFile(string FileName)
         {
             _FileName = FileName;
             if (!FileExists())
                 CreateFile();
         }

         #region AboutFile
         /**/
         /// <summary>
         /// 删除文件
         /// </summary>
         public void DeleteFile() {
             if (FileExists())
                 File.Delete(_FileName);
         }
         /**/
         /// <summary>
         /// 创建文件
         /// </summary>
         public void CreateFile() {
             File.Create(_FileName).Close();
         }
         /**/
         /// <summary>
         /// 判断文件是否存在
         /// </summary>
         /// <returns></returns>
         public bool FileExists() {
             return File.Exists(_FileName);
         }
         #endregion       
        

         #region Read
         /**//// <summary>
         /// 返回字符串
         /// </summary>
         public string ReadString(string Section, string Key) // 用StringBuilder只能读出第一行,不是一个好的写法 by DTY 09.4.15
         {           
            
             StringBuilder buffer= new StringBuilder(65535);                       
             GetPrivateProfileString(Section, Key, "", buffer, buffer.Capacity, _FileName);     
             return buffer.ToString();       

         }
         /**//// <summary>
         /// 返回int型的数
         /// </summary>
         public virtual int ReadInt(string Section, string Key)
         {
             int result;
             try
             {
                 result = int.Parse(this.ReadString(Section, Key));
             }
             catch
             {
                 result = -1;
             }
             return result;
         }
         /**//// <summary>
         /// 返回long型的数
         /// </summary>
         public virtual long ReadLong(string Section, string Key)
         {
             long result;
             try
             {
                 result = long.Parse(this.ReadString(Section, Key));
             }
             catch
             {
                 result = -1;
             }
             return result;           
         }
         /**//// <summary>
         /// 返回byte型的数
         /// </summary>
         public virtual byte ReadByte(string Section, string Key)
         {
             byte result;
             try
             {
                 result = byte.Parse(this.ReadString(Section, Key));
             }
             catch
             {
                 result = 0;
             }
            return result;
        }
        /**//// <summary>
        /// 返回float型的数
        /// </summary>
        public virtual float ReadFloat(string Section, string Key)
        {
            float result;
            try
            {
                result = float.Parse(this.ReadString(Section, Key));
            }
            catch
            {
                result = -1;
            }
            return result;
        }
        /**//// <summary>
        /// 返回double型的数
        /// </summary>
        public virtual double ReadDouble(string Section, string Key)
        {
            double result;
            try
            {
                result = double.Parse(this.ReadString(Section, Key));
            }
            catch
            {
                result = -1;
            }
            return result;
        }
        /**//// <summary>
        /// 返回日期型的数
        /// </summary>
        public virtual DateTime ReadDateTime(string Section, string Key)
        {
            DateTime result;
            try
            {
                result = DateTime.Parse(this.ReadString(Section, Key));
            }
            catch
            {
                result = DateTime.Parse("0-0-0"); ;
            }
            return result;           
        }
        /**//// <summary>
        /// 读bool量
        /// </summary>
        public virtual bool ReadBool(string Section, string Key)
        {
            bool result;
            try
            {
                result = bool.Parse(this.ReadString(Section, Key));
            }
            catch
            {
                result = bool.Parse("0-0-0"); ;
            }
            return result;   
        }       
        #endregion _Endregion;
        #region Write
     /**//// <summary>
        /// 用于写任何类型的键值到ini文件中
        /// </summary>
        /// <param name="Section">该键所在的节名称</param>
        /// <param name="Key">该键的名称</param>
        /// <param name="Value">该键的值</param>
        public void Write(string Section, string Key, object Value)
        {
            if (Value!=null)               
                WritePrivateProfileString(Section, Key, Value.ToString(), _FileName);
            else
                WritePrivateProfileString(Section, Key, null, _FileName);
        }

        #endregion
        #region others
        /**//// <summary>
        /// 返回该配置文件中所有Section名称的集合
        /// </summary>
        public ArrayList ReadSections()
        {
            byte[] buffer = new byte[65535];
            int rel = GetPrivateProfileSectionNamesA(buffer, buffer.GetUpperBound(0), _FileName);
            int iCnt, iPos;
            ArrayList arrayList = new ArrayList();
            string tmp;
            if (rel>0)
            {
                iCnt = 0; iPos = 0;                       
                for (iCnt = 0; iCnt < rel; iCnt++)
                {
                    if (buffer[iCnt] == 0x00)
                    {
                        tmp =System.Text.ASCIIEncoding.Default.GetString(buffer, iPos, iCnt-iPos ).Trim();
                        iPos = iCnt + 1;
                        if (tmp != "")
                            arrayList.Add(tmp);
                    }
                }
            }
            return arrayList;
        }

        // 获取节点的所有KEY值 by DTY 09.4.15
        public ArrayList ReadKeys(string sectionName) {

            byte[] buffer = new byte[5120];
            int rel = GetPrivateProfileStringA(sectionName, null, "", buffer, buffer.GetUpperBound(0), _FileName);
           
           
            int iCnt, iPos;
            ArrayList arrayList = new ArrayList();
            string tmp;
            if (rel > 0) {
                iCnt = 0; iPos = 0;
                for (iCnt = 0; iCnt < rel; iCnt++) {
                    if (buffer[iCnt] == 0x00) {
                        tmp = System.Text.ASCIIEncoding.Default.GetString(buffer, iPos, iCnt-iPos).Trim();
                        iPos = iCnt + 1;
                        if (tmp != "")
                            arrayList.Add(tmp);
                    }
                }
            }
            return arrayList;


        }
        /**//// <summary>
        /// 判断指定的节是否存在
        /// </summary>
        public bool SectionExists(string Section)
        {
            //done SectionExists
            StringBuilder buffer= new StringBuilder(65535);
            GetPrivateProfileSection(Section, buffer, buffer.Capacity, _FileName);
            if (buffer.ToString().Trim() == "")
                return false;
            else
                return true;
        }
        /**//// <summary>
        /// 判断指定的节中指定的键是否存在
        /// </summary>
        public bool ValueExits(string Section, string Key)
        {           
            if (ReadString(Section, Key).Trim() == "")
                return false;
            else
                return true;
        }
        /**//// <summary>
        /// 删除指定的节中的指定键
        /// </summary>
        /// <param name="Section">该键所在的节的名称</param>
        /// <param name="Key">该键的名称</param>
        public void DeleteKey(string Section, string Key)
        {           
            Write(Section, Key, null);
        }
        /**//// <summary>
        /// 删除指定的节的所有内容
        /// </summary>
        /// <param name="Section">要删除的节的名字</param>
        public void DeleteSection(string Section)
        {       
            WritePrivateProfileSection(Section, null, _FileName);
        }
        /**//// <summary>
        /// 添加一个节
        /// </summary>
        /// <param name="Section">要添加的节名称</param>
        public void AddSection(string Section)
        {
            WritePrivateProfileSection(Section, "", _FileName);

        }
        public void AddSection(string Section, string key) {
            WritePrivateProfileSection(Section, key, _FileName);
        }

        #endregion
    }
}

 

posted @ 2010-12-19 16:26  左正  阅读(264)  评论(0编辑  收藏  举报