背景:本來准備使用settings.settings來保存數據庫配置等信息的。但是設置為“應用程序”級別,就沒法方便的用 Properties.Settings.Default.Save() 更改保存。 且沒法在程序不重啟的情況下應用修改后的配置。如果設置為“用戶”級別,就存在配置信息保存到appData文件夾下被清空緩存失效的風險。因此回過頭來選擇ini來保存這些配置信息
網上找了個ini讀寫操作類,直接copy拿來用,測試可用,代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Runtime.InteropServices; namespace data_migration_desk.utils { // INI文件操作類 class IniFileHelper { string strIniFilePath; // ini配置文件路徑 // 返回0表示失敗,非0為成功 [DllImport("kernel32", CharSet = CharSet.Auto)] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); // 返回取得字符串緩沖區的長度 [DllImport("kernel32", CharSet = CharSet.Auto)] private static extern long GetPrivateProfileString(string section, string key, string strDefault, StringBuilder retVal, int size, string filePath); [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] public static extern int GetPrivateProfileInt(string section, string key, int nDefault, string filePath); /// <summary> /// 無參構造函數 /// </summary> /// <returns></returns> public IniFileHelper() { this.strIniFilePath = Directory.GetCurrentDirectory() + "\\Properties\\sysconfig.ini"; } /// <summary> /// 有參構造函數 /// </summary> /// <param name="strIniFilePath">ini配置文件路徑</param> /// <returns></returns> public IniFileHelper(string strIniFilePath) { if (strIniFilePath != null) { this.strIniFilePath = strIniFilePath; } } /// <summary> /// 獲取ini配置文件中的字符串 /// </summary> /// <param name="section">節名</param> /// <param name="key">鍵名</param> /// <param name="strDefault">默認值</param> /// <param name="retVal">結果緩沖區</param> /// <param name="size">結果緩沖區大小</param> /// <returns>成功true,失敗false</returns> public bool GetIniString(string section, string key, string strDefault, StringBuilder retVal, int size) { long liRet = GetPrivateProfileString(section, key, strDefault, retVal, size, strIniFilePath); return (liRet >= 1); } /// <summary> /// 獲取ini配置文件中的整型值 /// </summary> /// <param name="section">節名</param> /// <param name="key">鍵名</param> /// <param name="nDefault">默認值</param> /// <returns></returns> public int GetIniInt(string section, string key, int nDefault) { return GetPrivateProfileInt(section, key, nDefault, strIniFilePath); } /// <summary> /// 往ini配置文件寫入字符串 /// </summary> /// <param name="section">節名</param> /// <param name="key">鍵名</param> /// <param name="val">要寫入的字符串</param> /// <returns>成功true,失敗false</returns> public bool WriteIniString(string section, string key, string val) { long liRet = WritePrivateProfileString(section, key, val, strIniFilePath); return (liRet != 0); } /// <summary> /// 往ini配置文件寫入整型數據 /// </summary> /// <param name="section">節名</param> /// <param name="key">鍵名</param> /// <param name="val">要寫入的數據</param> /// <returns>成功true,失敗false</returns> public bool WriteIniInt(string section, string key, int val) { return WriteIniString(section, key, val.ToString()); } } }
使用方法:
讀取:
IniFileHelper iniFileHelper = new IniFileHelper(); StringBuilder sb = new StringBuilder(60); iniFileHelper.GetIniString("tokeninfo", "apiUrl", "", sb, sb.Capacity); string aaa = sb.ToString();
寫入:
IniFileHelper iniFileHelper = new IniFileHelper(); iniFileHelper.WriteIniString("tokeninfo", "apiUrl", "newString");
其中,ini配置文件有一些需要講究的地方,不然,就會出現讀取不到值的情況