C#創建ini文件、讀取值、修改值

jopen 9年前發布 | 4K 次閱讀 C#

調用方法:

int iBaudRate = InIHelper.ReadConfig<int>("COM_SETUP", "波特率")

InIHelper類:

public class InIHelper
    {
        private static string FileName = Application.StartupPath + "\AppConfig.ini";
        /// <summary>
        /// 讀取配置文件
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="section"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static T ReadConfig<T>(string section, string key)
        {
            if (File.Exists(FileName))
            {
                IniFile f = new IniFile(FileName);
                string value = f.ReadContentValue(section, key);

            if (String.IsNullOrWhiteSpace(value))
                return default(T);

            if (typeof(T).IsEnum)
                return (T)Enum.Parse(typeof(T), value, true);

            return (T)Convert.ChangeType(value, typeof(T));
        }
        else
        {
            return default(T);
        }
    }

    /// <summary>
    /// 寫配置文件
    /// </summary>
    /// <param name="section"></param>
    /// <param name="key"></param>
    /// <param name="value"></param>
    public static void WriteConfig(string section, string key, string value)
    {
        //如果文件不存在,則創建
        if (!File.Exists(FileName))
        {
            using (FileStream myFs = new FileStream(FileName, FileMode.Create)) { }
        }

        IniFile f = new IniFile(FileName);
        f.WriteContentValue(section, key, value);
    }
}</pre> 


核心代碼:

public class IniFile
    {
        public string Path;

    public IniFile(string path)
    {
        this.Path = path;
    }

    /// <summary>
    /// 寫入INI文件
    /// </summary>
    /// <param name="section">節點名稱[如[TypeName]]</param>
    /// <param name="key">鍵</param>
    /// <param name="val">值</param>
    /// <param name="filepath">文件路徑</param>
    /// <returns></returns>
    [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">stringbulider對象</param>
    /// <param name="size">字節大小</param>
    /// <param name="filePath">文件路徑</param>
    /// <returns></returns>
    [DllImport("kernel32")]
    private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retval, int size, string filePath);

    /// <summary>
    /// 寫入
    /// </summary>
    /// <param name="section"></param>
    /// <param name="key"></param>
    /// <param name="iValue"></param>
    public void WriteContentValue(string section, string key, string iValue)
    {
        WritePrivateProfileString(section, key, iValue, this.Path);
    }

    /// <summary>
    /// 讀取INI文件中的內容方法
    /// </summary>
    /// <param name="Section">鍵</param>
    /// <param name="key">值</param>
    /// <returns></returns>
    public string ReadContentValue(string Section, string key)
    {
        StringBuilder temp = new StringBuilder(1024);
        GetPrivateProfileString(Section, key, "", temp, 1024, this.Path);
        return temp.ToString();
    }
}</pre> 


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!