using System.Text;

namespace DeskRedis.Util
{
    /// <summary>
    /// ini文件操作工具
    /// </summary>
    public static class IniUtil
    {
        /// <summary>
        /// 写入ini配置
        /// </summary>
        /// <param name="section">小节名称</param>
        /// <param name="key">键</param>
        /// <param name="val">值</param>
        /// <param name="filePath">文件路径</param>
        /// <returns>返回写入的字符串的长度</returns>
        [System.Runtime.InteropServices.DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);

        /// <summary>
        /// 读取ini配置
        /// </summary>
        /// <param name="section">小节名称</param>
        /// <param name="key">键</param>
        /// <param name="def">指定的条目没有找到时返回的默认值</param>
        /// <param name="retVal">指定一个字串缓冲区</param>
        /// <param name="size">指定装载到BuildString缓冲区的最大字符数量</param>
        /// <param name="filePath">文件路径</param>
        /// <returns>返回读取到的键对应的值</returns>
        [System.Runtime.InteropServices.DllImport("kernel32")]
        private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

        /// <summary>
        /// 写入ini配置
        /// </summary>
        /// <param name="path">文件路径(包含文件名称的完整路径)</param>
        /// <param name="section">小节名称</param>
        /// <param name="key">键</param>
        /// <param name="value">The value.</param>
        public static void WriteINI(string path, string section, string key, string value)
        {
            if (System.IO.File.Exists(path) == false)
            {
                System.IO.File.Create(path).Close();
            }

            WritePrivateProfileString(section, key, value, path);
        }

        /// <summary>
        /// 读取ini配置
        /// </summary>
        /// <param name="path">文件路径(包含文件名称的完整路径)</param>
        /// <param name="section">小节名称</param>
        /// <param name="key">小节的键</param>
        /// <param name="def">指定的条目没有找到时返回的默认值</param>
        /// <returns>返回读取到的小节的键对应的值</returns>
        public static string ReadINI(string path, string section, string key, string def)
        {
            if (System.IO.File.Exists(path) == false)
            {
                System.IO.File.Create(path).Close();
            }

            StringBuilder temp = new StringBuilder(255);
            GetPrivateProfileString(section, key, def, temp, 255, path);
            return temp.ToString();
        }
    }
}