using System.Collections.Generic;using System.Diagnostics;using System.IO;using System.Reflection;using System.Runtime.InteropServices;using System.Text;namespace CSharpUtilHelpV2{ /// <summary> /// 基于.NET 2.0的INI工具類 /// 參考: /// http://www.survivalescaperooms.com/leelike/archive/2011/01/27/1946061.html /// http://www.survivalescaperooms.com/zzyyll2/archive/2007/11/06/950584.html /// </summary> public class INIToolV2 { static string FilePath = null; /// <summary> /// 當(dāng)讀取不到值得時候缺省值 /// </summary> static string ReadDefaultValue = string.Empty; /// <summary> /// 構(gòu)造函數(shù) /// </summary> /// <param name="filePath">INI路徑eg:@"C:/test.ini"</param> public INIToolV2(string filePath) { FilePath = filePath; } /// <summary> /// 聲明INI文件的寫操作函數(shù) /// </summary> /// <param name="section">段落名稱</param> /// <param name="key">關(guān)鍵字</param> /// <param name="val">關(guān)鍵字對應(yīng)的值</param> /// <param name="filePath">路徑</param> /// <returns></returns> [DllImport("kernel32")] PRivate static extern long WritePrivateProfileString(string section, string key, string val, string filePath); /// <summary> /// 聲明INI文件的讀操作函數(shù) /// </summary> /// <param name="section">段落名稱</param> /// <param name="key">關(guān)鍵字</param> /// <param name="def">無法讀取時候時候的缺省數(shù)值</param> /// <param name="retVal">讀取數(shù)值</param> /// <param name="size">數(shù)值的大小></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> /// 寫入INI /// eg:_iniHelper.WriteValue("測試", "Name", "YanZhiwei"); /// </summary> /// <param name="Section">段落名稱</param> /// <param name="Key">關(guān)鍵字</param> /// <param name="Value">關(guān)鍵字對應(yīng)的值</param> public void WriteValue(string Section, string Key, string Value) { WritePrivateProfileString(Section, Key, Value, FilePath); } /// <summary> /// 讀取INI /// </summary> /// <param name="Section">段落名稱</param> /// <param name="Key">關(guān)鍵字</param> /// <returns>讀取值</returns> public string ReadValue(string Section, string Key) { StringBuilder _valueBuilder = new StringBuilder(500); GetPrivateProfileString(Section, Key, ReadDefaultValue, _valueBuilder, 500, FilePath); return _valueBuilder.ToString(); } /// <summary> /// 讀取INI /// </summary> /// <param name="Section">段落名稱</param> /// <param name="Key">關(guān)鍵字</param> /// <param name="defaultValue">當(dāng)根據(jù)KEY讀取不到值得時候缺省值</param> /// <returns></returns> public string ReadValue(string Section, string Key, string defaultValue) { StringBuilder _valueBuilder = new StringBuilder(500); GetPrivateProfileString(Section, Key, defaultValue, _valueBuilder, 500, FilePath); return _valueBuilder.ToString(); } /// <summary> /// 檢查INI文件路徑是否存在 /// </summary> /// <returns></returns> public bool Exist() { if (!string.IsNullOrEmpty(FilePath)) { return File.Exists(FilePath); } return false; } /// <summary> /// 將對象保存在ini /// </summary> /// <typeparam name="T">泛型</typeparam> /// <param name="Section">段落名稱</param> /// <param name="t">類型</param> public void WriteValue<T>(string Section, T t) where T : class { IDictionary<string, string> _property = ReflectionToolV2.GetDisplayName<T>(); foreach (KeyValuePair<string, string> entry in _property) { object _value = typeof(T).InvokeMember(entry.Key, BindingFlags.GetProperty, null, t, null); Trace.WriteLine(_value); if (_value != null) WriteValue(Section, entry.Value, _value.ToString()); } } }}
測試代碼
代碼效果:
新聞熱點(diǎn)
疑難解答