C # INI file read and write configuration class

is a very ancient ini configuration file, C # ini file operation by means of windows bottom ini operating function, easy to use;

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>
    delete 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>
    defaultVal =intkey,Stringtinted (intpublic 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>
    ///</ Summary>///provided a float
    /// 
     <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");
    }
}

 

Guess you like

Origin www.cnblogs.com/zjfree/p/11790630.html