使用INI配置文件,簡(jiǎn)單便捷。
創(chuàng)新互聯(lián)公司長(zhǎng)期為上千客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為寧遠(yuǎn)企業(yè)提供專(zhuān)業(yè)的成都網(wǎng)站制作、網(wǎng)站建設(shè),寧遠(yuǎn)網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
該輔助工具類(lèi)為C#操作INI文件的輔助類(lèi),源碼在某位師傅的基礎(chǔ)上完善的來(lái),因?yàn)橥涀畛醯膩?lái)源了,因此不能提及引用,在此深感遺憾,并對(duì)貢獻(xiàn)者表示感謝。
using System; using System.Collections; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; namespace Eyuan.Common { public static class INIHelper { #region 讀寫(xiě)INI文件相關(guān) [DllImport("kernel32.dll", EntryPoint = "WritePrivateProfileString", CharSet = CharSet.Ansi)] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); [DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileString", CharSet = CharSet.Ansi)] private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); [DllImport("kernel32")] private static extern int GetPrivateProfileInt(string lpApplicationName, string lpKeyName, int nDefault, string lpFileName); [DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileSectionNames", CharSet = CharSet.Ansi)] private static extern int GetPrivateProfileSectionNames(IntPtr lpszReturnBuffer, int nSize, string filePath); [DllImport("KERNEL32.DLL ", EntryPoint = "GetPrivateProfileSection", CharSet = CharSet.Ansi)] private static extern int GetPrivateProfileSection(string lpAppName, byte[] lpReturnedString, int nSize, string filePath); #endregion #region 讀寫(xiě)操作(字符串) ////// 向INI寫(xiě)入數(shù)據(jù) /// /// 節(jié)點(diǎn)名 /// 鍵名 /// 值(字符串) public static void Write(string Section, string Key, string Value, string path) { WritePrivateProfileString(Section, Key, Value, path); } ////// 讀取INI數(shù)據(jù) /// /// 節(jié)點(diǎn)名 /// 鍵名 /// 值名 ///值(字符串) public static string Read(string Section, string Key, string path) { StringBuilder temp = new StringBuilder(255); int i = GetPrivateProfileString(Section, Key, "", temp, 255, path); return temp.ToString(); } #endregion #region 配置節(jié)信息 ////// 讀取一個(gè)ini里面所有的節(jié) /// /// /// ///-1:沒(méi)有節(jié)信息,0:正常 public static int GetAllSectionNames(out string[] sections, string path) { int MAX_BUFFER = 32767; IntPtr pReturnedString = Marshal.AllocCoTaskMem(MAX_BUFFER); int bytesReturned = GetPrivateProfileSectionNames(pReturnedString, MAX_BUFFER, path); if (bytesReturned == 0) { sections = null; return -1; } string local = Marshal.PtrToStringAnsi(pReturnedString, (int)bytesReturned).ToString(); Marshal.FreeCoTaskMem(pReturnedString); //use of Substring below removes terminating null for split sections = local.Substring(0, local.Length - 1).Split('\0'); return 0; } ////// 返回指定配置文件下的節(jié)名稱(chēng)列表 /// /// ///public static List GetAllSectionNames(string path) { List sectionList = new List (); int MAX_BUFFER = 32767; IntPtr pReturnedString = Marshal.AllocCoTaskMem(MAX_BUFFER); int bytesReturned = GetPrivateProfileSectionNames(pReturnedString, MAX_BUFFER, path); if (bytesReturned != 0) { string local = Marshal.PtrToStringAnsi(pReturnedString, (int)bytesReturned).ToString(); Marshal.FreeCoTaskMem(pReturnedString); sectionList.AddRange(local.Substring(0, local.Length - 1).Split('\0')); } return sectionList; } /// /// 得到某個(gè)節(jié)點(diǎn)下面所有的key和value組合 /// /// 指定的節(jié)名稱(chēng) /// Key數(shù)組 /// Value數(shù)組 /// INI文件路徑 ///public static int GetAllKeyValues(string section, out string[] keys, out string[] values, string path) { byte[] b = new byte[65535];//配置節(jié)下的所有信息 GetPrivateProfileSection(section, b, b.Length, path); string s = System.Text.Encoding.Default.GetString(b);//配置信息 string[] tmp = s.Split((char)0);//Key\Value信息 List result = new List (); foreach (string r in tmp) { if (r != string.Empty) result.Add(r); } keys = new string[result.Count]; values = new string[result.Count]; for (int i = 0; i < result.Count; i++) { string[] item = result[i].Split(new char[] { '=' });//Key=Value格式的配置信息 //Value字符串中含有=的處理, //一、Value加"",先對(duì)""處理 //二、Key后續(xù)的都為Value if (item.Length > 2) { keys[i] = item[0].Trim(); values[i] = result[i].Substring(keys[i].Length + 1); } if (item.Length == 2)//Key=Value { keys[i] = item[0].Trim(); values[i] = item[1].Trim(); } else if (item.Length == 1)//Key= { keys[i] = item[0].Trim(); values[i] = ""; } else if (item.Length == 0) { keys[i] = ""; values[i] = ""; } } return 0; } /// /// 得到某個(gè)節(jié)點(diǎn)下面所有的key /// /// 指定的節(jié)名稱(chēng) /// Key數(shù)組 /// INI文件路徑 ///public static int GetAllKeys(string section, out string[] keys, string path) { byte[] b = new byte[65535]; GetPrivateProfileSection(section, b, b.Length, path); string s = System.Text.Encoding.Default.GetString(b); string[] tmp = s.Split((char)0); ArrayList result = new ArrayList(); foreach (string r in tmp) { if (r != string.Empty) result.Add(r); } keys = new string[result.Count]; for (int i = 0; i < result.Count; i++) { string[] item = result[i].ToString().Split(new char[] { '=' }); if (item.Length == 2) { keys[i] = item[0].Trim(); } else if (item.Length == 1) { keys[i] = item[0].Trim(); } else if (item.Length == 0) { keys[i] = ""; } } return 0; } /// /// 獲取指定節(jié)下的Key列表 /// /// 指定的節(jié)名稱(chēng) /// 配置文件名稱(chēng) ///Key列表 public static ListGetAllKeys(string section, string path) { List keyList = new List (); byte[] b = new byte[65535]; GetPrivateProfileSection(section, b, b.Length, path); string s = System.Text.Encoding.Default.GetString(b); string[] tmp = s.Split((char)0); List result = new List (); foreach (string r in tmp) { if (r != string.Empty) result.Add(r); } for (int i = 0; i < result.Count; i++) { string[] item = result[i].Split(new char[] { '=' }); if (item.Length == 2 || item.Length == 1) { keyList.Add(item[0].Trim()); } else if (item.Length == 0) { keyList.Add(string.Empty); } } return keyList; } /// /// 獲取值 /// /// /// ///public static List GetAllValues(string section, string path) { List keyList = new List (); byte[] b = new byte[65535]; GetPrivateProfileSection(section, b, b.Length, path); string s = System.Text.Encoding.Default.GetString(b); string[] tmp = s.Split((char)0); List result = new List (); foreach (string r in tmp) { if (r != string.Empty) result.Add(r); } for (int i = 0; i < result.Count; i++) { string[] item = result[i].Split(new char[] { '=' }); if (item.Length == 2 || item.Length == 1) { keyList.Add(item[1].Trim()); } else if (item.Length == 0) { keyList.Add(string.Empty); } } return keyList; } #endregion #region 通過(guò)值查找鍵(一個(gè)節(jié)中的鍵唯一,可能存在多個(gè)鍵值相同,因此反查的結(jié)果可能為多個(gè)) /// /// 第一個(gè)鍵 /// /// /// /// ///public static string GetFirstKeyByValue(string section, string path, string value) { foreach (string key in GetAllKeys(section, path)) { if (ReadString(section, key, "", path) == value) { return key; } } return string.Empty; } /// /// 所有鍵 /// /// /// /// ///public static List GetKeysByValue(string section, string path, string value) { List keys = new List (); foreach (string key in GetAllKeys(section, path)) { if (ReadString(section, key, "", path) == value) { keys.Add(key); } } return keys; } #endregion #region 具體類(lèi)型的讀寫(xiě) #region string /// /// /// /// /// /// /// ///public static string ReadString(string sectionName, string keyName, string defaultValue, string path) { const int MAXSIZE = 255; StringBuilder temp = new StringBuilder(MAXSIZE); GetPrivateProfileString(sectionName, keyName, defaultValue, temp, 255, path); return temp.ToString(); } /// /// /// /// /// /// /// public static void WriteString(string sectionName, string keyName, string value, string path) { WritePrivateProfileString(sectionName, keyName, value, path); } #endregion #region Int ////// /// /// /// /// /// ///public static int ReadInteger(string sectionName, string keyName, int defaultValue, string path) { return GetPrivateProfileInt(sectionName, keyName, defaultValue, path); } /// /// /// /// /// /// /// public static void WriteInteger(string sectionName, string keyName, int value, string path) { WritePrivateProfileString(sectionName, keyName, value.ToString(), path); } #endregion #region bool ////// 讀取布爾值 /// /// /// /// /// ///public static bool ReadBoolean(string sectionName, string keyName, bool defaultValue, string path) { int temp = defaultValue ? 1 : 0; int result = GetPrivateProfileInt(sectionName, keyName, temp, path); return (result == 0 ? false : true); } /// /// 寫(xiě)入布爾值 /// /// /// /// /// public static void WriteBoolean(string sectionName, string keyName, bool value, string path) { string temp = value ? "1 " : "0 "; WritePrivateProfileString(sectionName, keyName, temp, path); } #endregion #endregion #region 刪除操作 ////// 刪除指定項(xiàng) /// /// /// /// public static void DeleteKey(string sectionName, string keyName, string path) { WritePrivateProfileString(sectionName, keyName, null, path); } ////// 刪除指定節(jié)下的所有項(xiàng) /// /// /// public static void EraseSection(string sectionName, string path) { WritePrivateProfileString(sectionName, null, null, path); } #endregion #region 判斷節(jié)、鍵是否存在 ////// 指定節(jié)知否存在 /// /// /// ///public static bool ExistSection(string section, string fileName) { string[] sections = null; GetAllSectionNames(out sections, fileName); if (sections != null) { foreach (var s in sections) { if (s == section) { return true; } } } return false; } /// /// 指定節(jié)下的鍵是否存在 /// /// /// /// ///public static bool ExistKey(string section, string key, string fileName) { string[] keys = null; GetAllKeys(section, out keys, fileName); if (keys != null) { foreach (var s in keys) { if (s == key) { return true; } } } return false; } #endregion #region 同一Section下添加多個(gè)Key\Value /// /// /// /// /// /// /// ///public static bool AddSectionWithKeyValues(string section, List keyList, List valueList, string path) { bool bRst = true; //判斷Section是否已經(jīng)存在,如果存在,返回false //已經(jīng)存在,則更新 //if (GetAllSectionNames(path).Contains(section)) //{ // return false; //} //判斷keyList中是否有相同的Key,如果有,返回false //添加配置信息 for (int i = 0; i < keyList.Count; i++) { WriteString(section, keyList[i], valueList[i], path); } return bRst; } #endregion } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。