• C# INI配置文件读写类


    ini是一种很古老的配置文件,C#操作ini文件借助windows底层ini操作函数,使用起来很方便;

    public class IniHelper
    {
        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section, string key, string val, string filepath);
    
        [DllImport("kernel32")]
        private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retval, int size, string filePath);
    
        [DllImport("kernel32", EntryPoint = "GetPrivateProfileString")]
        private static extern uint GetPrivateProfileStringA(string section, string key, string def, byte[] retVal, int size, string filePath);
    
        private string FilePath = "";
        private string Section = "";
    
        private Dictionary<string, string> List = new Dictionary<string, string>();
    
        /// <summary>
        /// INI工具类
        /// </summary>
        /// <param name="_filePath"></param>
        /// <param name="_section"></param>
        public IniHelper(string _filePath = "config.ini", string _section = "default")
        {
            if (_filePath.Contains("\"))
            {
                FilePath = _filePath;
            }
            else
            {
                FilePath = Application.StartupPath + "\" + _filePath;
            }
    
            Section = _section;
    
            Reload();
        }
    
        /// <summary>
        /// 重新加载
        /// </summary>
        public void Reload()
        {
            this.List = new Dictionary<string, string>();
    
            List<string> keyList = _getKeyList();
            foreach (var key in keyList)
            {
                this.List.Add(key, Get(key));
            }
        }
    
        /// <summary>
        /// 获取key列表
        /// </summary>
        /// <returns></returns>
        public string[] GetKeyList()
        {
            return this.List.Keys.ToArray();
        }
    
        /// <summary>
        /// 获取所有KEY
        /// </summary>
        /// <returns></returns>
        private List<string> _getKeyList()
        {
            List<string> result = new List<string>();
            byte[] buf = new byte[65536];
            uint len = GetPrivateProfileStringA(Section, null, null, buf, buf.Length, FilePath);
    
            int j = 0;
            for (int i = 0; i < len; i++)
            if (buf[i] == 0)
            {
                result.Add(Encoding.Default.GetString(buf, j, i - j));
                j = i + 1;
            }
    
            return result;
        }
    
        /// <summary>
        /// 获取值
        /// </summary>
        /// <param name="key"></param>
        /// <param name="defaultVal"></param>
        /// <returns></returns>
        public string Get(string key, string defaultVal = "")
        {
            if (this.List.ContainsKey(key))
            {
                return this.List[key];
            }
    
            StringBuilder s = new StringBuilder(1024);
            GetPrivateProfileString(Section, key, defaultVal, s, 1024, FilePath);
    
            return s.ToString();
        }
    
        /// <summary>
        /// 设置值
        /// </summary>
        /// <param name="key"></param>
        /// <param name="val"></param>
        public void Set(string key, string val)
        {
            this.List[key] = val;
            WritePrivateProfileString(Section, key, val, FilePath);
        }
    
        /// <summary>
        /// 删除key
        /// </summary>
        /// <param name="key"></param>
        public void Del(string key)
        {
            this.List.Remove(key);
            WritePrivateProfileString(Section, key, null, FilePath);
        }
    
        /// <summary>
        /// 获取int
        /// </summary>
        /// <param name="key"></param>
        /// <param name="defaultVal"></param>
        /// <returns></returns>
        public int GetInt(string key, int defaultVal = 0)
        {
            string str = Get(key, defaultVal.ToString());
    
            int val = defaultVal;
            bool bo = int.TryParse(str, out val);
    
            return bo ? val : defaultVal;
        }
    
        /// <summary>
        /// 获取float
        /// </summary>
        /// <param name="key"></param>
        /// <param name="defaultVal"></param>
        /// <returns></returns>
        public float GetFloat(string key, float defaultVal = 0)
        {
            string str = Get(key, defaultVal.ToString());
    
            float val = defaultVal;
            bool bo = float.TryParse(str, out val);
    
            return bo ? val : defaultVal;
        }
    
        /// <summary>
        /// 获取bool
        /// </summary>
        /// <param name="key"></param>
        /// <param name="defaultVal"></param>
        /// <returns></returns>
        public bool GetBool(string key, bool defaultVal = false)
        {
            string str = Get(key, defaultVal ? "1" : "0");
    
            return str == "1";
        }
    
        /// <summary>
        /// 设置int
        /// </summary>
        /// <param name="key"></param>
        /// <param name="val"></param>
        public void SetInt(string key, int val)
        {
            Set(key, val.ToString());
        }
    
        /// <summary>
        /// 设置float
        /// </summary>
        /// <param name="key"></param>
        /// <param name="val"></param>
        public void SetFloat(string key, float val)
        {
            Set(key, val.ToString());
        }
    
        /// <summary>
        /// 设置bool
        /// </summary>
        /// <param name="key"></param>
        /// <param name="bo"></param>
        public void SetBool(string key, bool bo)
        {
            Set(key, bo ? "1" : "0");
        }
    }
  • 相关阅读:
    浏览器能正常访问的url,superagent不能正常访问
    Reactor模式理解
    牛客网剑指offer 二维数组的查找
    在C语言结构体中添加成员函数
    html页面字体相关
    html页面背景设定相关
    快速排序
    html页面边框的另一种写法
    2018暑期北航软件能力培养师资培训有感
    web.xml文件介绍
  • 原文地址:https://www.cnblogs.com/zjfree/p/11790630.html
Copyright © 2020-2023  润新知