亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#操作INI文件的輔助類IniHelper

2019-10-29 21:03:23
字體:
來源:轉載
供稿:網友

使用INI配置文件,簡單便捷。

該輔助工具類為C#操作INI文件的輔助類,源碼在某位師傅的基礎上完善的來,因為忘記最初的來源了,因此不能提及引用,在此深感遺憾,并對貢獻者表示感謝。

using System;using System.Collections;using System.Collections.Generic;using System.Runtime.InteropServices;using System.Text;namespace Eyuan.Common{ public static class INIHelper {  #region 讀寫INI文件相關  [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 讀寫操作(字符串)  /// <summary>  /// 向INI寫入數據  /// </summary>  /// <PARAM name="Section">節點名</PARAM>  /// <PARAM name="Key">鍵名</PARAM>  /// <PARAM name="Value">值(字符串)</PARAM>  public static void Write(string Section, string Key, string Value, string path)  {   WritePrivateProfileString(Section, Key, Value, path);  }  /// <summary>  /// 讀取INI數據  /// </summary>  /// <PARAM name="Section">節點名</PARAM>  /// <PARAM name="Key">鍵名</PARAM>  /// <PARAM name="Path">值名</PARAM>  /// <returns>值(字符串)</returns>  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 配置節信息  /// <summary>  /// 讀取一個ini里面所有的節  /// </summary>  /// <param name="sections"></param>  /// <param name="path"></param>  /// <returns>-1:沒有節信息,0:正常</returns>  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;  }  /// <summary>  /// 返回指定配置文件下的節名稱列表  /// </summary>  /// <param name="path"></param>  /// <returns></returns>  public static List<string> GetAllSectionNames(string path)  {   List<string> sectionList = new List<string>();   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;  }  /// <summary>  /// 得到某個節點下面所有的key和value組合  /// </summary>  /// <param name="section">指定的節名稱</param>  /// <param name="keys">Key數組</param>  /// <param name="values">Value數組</param>  /// <param name="path">INI文件路徑</param>  /// <returns></returns>  public static int GetAllKeyValues(string section, out string[] keys, out string[] values, 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);//Key/Value信息   List<string> result = new List<string>();   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加"",先對""處理    //二、Key后續的都為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;  }  /// <summary>  /// 得到某個節點下面所有的key  /// </summary>  /// <param name="section">指定的節名稱</param>  /// <param name="keys">Key數組</param>  /// <param name="path">INI文件路徑</param>  /// <returns></returns>  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;  }  /// <summary>  /// 獲取指定節下的Key列表  /// </summary>  /// <param name="section">指定的節名稱</param>  /// <param name="path">配置文件名稱</param>  /// <returns>Key列表</returns>  public static List<string> GetAllKeys(string section, string path)  {   List<string> keyList = new List<string>();   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<string> result = new List<string>();   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;  }  /// <summary>  /// 獲取值  /// </summary>  /// <param name="section"></param>  /// <param name="path"></param>  /// <returns></returns>  public static List<string> GetAllValues(string section, string path)  {   List<string> keyList = new List<string>();   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<string> result = new List<string>();   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 通過值查找鍵(一個節中的鍵唯一,可能存在多個鍵值相同,因此反查的結果可能為多個)  /// <summary>  /// 第一個鍵  /// </summary>  /// <param name="section"></param>  /// <param name="path"></param>  /// <param name="value"></param>  /// <returns></returns>  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;  }  /// <summary>  /// 所有鍵  /// </summary>  /// <param name="section"></param>  /// <param name="path"></param>  /// <param name="value"></param>  /// <returns></returns>  public static List<string> GetKeysByValue(string section, string path, string value)  {   List<string > keys = new List<string>();   foreach (string key in GetAllKeys(section, path))   {    if (ReadString(section, key, "", path) == value)    {     keys.Add(key);    }   }   return keys;  }  #endregion  #region 具體類型的讀寫  #region string  /// <summary>  ///   /// </summary>  /// <param name="sectionName"></param>  /// <param name="keyName"></param>  /// <param name="defaultValue" />  /// <param name="path"></param>  /// <returns></returns>  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();  }  /// <summary>  ///   /// </summary>  /// <param name="sectionName"></param>  /// <param name="keyName"></param>  /// <param name="value"></param>  /// <param name="path"></param>  public static void WriteString(string sectionName, string keyName, string value, string path)  {   WritePrivateProfileString(sectionName, keyName, value, path);  }  #endregion  #region Int  /// <summary>  ///   /// </summary>  /// <param name="sectionName"></param>  /// <param name="keyName"></param>  /// <param name="defaultValue"></param>  /// <param name="path"></param>  /// <returns></returns>  public static int ReadInteger(string sectionName, string keyName, int defaultValue, string path)  {   return GetPrivateProfileInt(sectionName, keyName, defaultValue, path);  }  /// <summary>  ///   /// </summary>  /// <param name="sectionName"></param>  /// <param name="keyName"></param>  /// <param name="value"></param>  /// <param name="path"></param>  public static void WriteInteger(string sectionName, string keyName, int value, string path)  {   WritePrivateProfileString(sectionName, keyName, value.ToString(), path);  }  #endregion  #region bool  /// <summary>  /// 讀取布爾值  /// </summary>  /// <param name="sectionName"></param>  /// <param name="keyName"></param>  /// <param name="defaultValue"></param>  /// <param name="path"></param>  /// <returns></returns>  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);  }  /// <summary>  /// 寫入布爾值  /// </summary>  /// <param name="sectionName"></param>  /// <param name="keyName"></param>  /// <param name="value"></param>  /// <param name="path"></param>  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 刪除操作  /// <summary>  /// 刪除指定項  /// </summary>  /// <param name="sectionName"></param>  /// <param name="keyName"></param>  /// <param name="path"></param>  public static void DeleteKey(string sectionName, string keyName, string path)  {   WritePrivateProfileString(sectionName, keyName, null, path);  }  /// <summary>  /// 刪除指定節下的所有項  /// </summary>  /// <param name="sectionName"></param>  /// <param name="path"></param>  public static void EraseSection(string sectionName, string path)  {   WritePrivateProfileString(sectionName, null, null, path);  }  #endregion  #region 判斷節、鍵是否存在  /// <summary>  /// 指定節知否存在  /// </summary>  /// <param name="section"></param>  /// <param name="fileName"></param>  /// <returns></returns>  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;  }  /// <summary>  /// 指定節下的鍵是否存在  /// </summary>  /// <param name="section"></param>  /// <param name="key"></param>  /// <param name="fileName"></param>  /// <returns></returns>  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下添加多個Key/Value  /// <summary>  ///   /// </summary>  /// <param name="section"></param>  /// <param name="keyList"></param>  /// <param name="valueList"></param>  /// <param name="path"></param>  /// <returns></returns>  public static bool AddSectionWithKeyValues(string section, List<string> keyList, List<string> valueList, string path)  {   bool bRst = true;   //判斷Section是否已經存在,如果存在,返回false   //已經存在,則更新   //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 }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产婷婷成人久久av免费高清| 亚洲综合在线中文字幕| 欧美精品做受xxx性少妇| 日韩欧美亚洲国产一区| 亚洲第一网中文字幕| 91精品在线看| 2019日本中文字幕| 国产精品免费观看在线| 亚洲视频电影图片偷拍一区| 26uuu日韩精品一区二区| 国产在线精品一区免费香蕉| 日韩亚洲在线观看| 国产免费亚洲高清| 夜夜躁日日躁狠狠久久88av| 欧美极品第一页| 国产在线视频2019最新视频| 国产极品jizzhd欧美| 国产欧美精品一区二区| 久久久视频精品| 成人国产精品色哟哟| 欧美日韩国产va另类| 欧美激情国内偷拍| 日本亚洲精品在线观看| 在线精品国产成人综合| 日韩国产精品一区| 超碰日本道色综合久久综合| 人人做人人澡人人爽欧美| 日韩av在线不卡| 精品久久久久久久久久久久| 国产精品99久久99久久久二8| 日韩黄色高清视频| 亚洲精品中文字幕女同| 综合网中文字幕| 国产精品一区二区三区免费视频| 富二代精品短视频| 97精品久久久中文字幕免费| 欧美激情网友自拍| 插插插亚洲综合网| 亚洲成人国产精品| 欧美日韩综合视频| 国产一级揄自揄精品视频| 97国产精品人人爽人人做| 日韩男女性生活视频| 欧美黑人一级爽快片淫片高清| 亚洲福利视频免费观看| 国产精品日韩在线播放| 久久久噜噜噜久久久| 在线日韩欧美视频| 成人免费黄色网| 亚洲成人av片| 成人444kkkk在线观看| 亚洲国产精品久久91精品| 亚洲国产美女精品久久久久∴| 国产精品中文字幕在线| 久久久成人的性感天堂| 黄色成人av在线| 国产精品爽黄69天堂a| 九九精品视频在线| 亚洲精品久久视频| 国内偷自视频区视频综合| 国产97免费视| 亚洲国产精品字幕| 亚洲日本中文字幕| 国产精品一区二区三区毛片淫片| 亚洲片国产一区一级在线观看| 精品久久国产精品| 激情懂色av一区av二区av| 91精品国产免费久久久久久| 欧美伊久线香蕉线新在线| 欧美激情欧美狂野欧美精品| 国产视频自拍一区| 国产一区二区免费| 亚洲一区二区精品| 亚洲男人的天堂网站| 国产午夜精品美女视频明星a级| 亚洲一区二区久久| 夜夜嗨av色综合久久久综合网| 日韩中文字幕视频| 国产精品久久久av久久久| 亚洲精品日韩激情在线电影| 国产偷国产偷亚洲清高网站| 久久91亚洲人成电影网站| 国产999精品久久久影片官网| 国产色综合天天综合网| 高清欧美性猛交xxxx| 91禁外国网站| 色综合色综合网色综合| 国产精品吹潮在线观看| 岛国av在线不卡| 精品动漫一区二区| 欧美日韩在线观看视频小说| 国产精品久久久久久久美男| 综合网日日天干夜夜久久| 亚洲欧美日韩天堂一区二区| 亚洲sss综合天堂久久| 亚洲毛茸茸少妇高潮呻吟| 国产精品27p| 日韩成人久久久| 亚州成人av在线| www.日韩不卡电影av| 日韩精品极品视频免费观看| 国产精品黄页免费高清在线观看| 色综合导航网站| 亚洲色图在线观看| 亚洲精品久久久久久久久久久| 亚洲第一中文字幕| 国产午夜一区二区| 日韩精品中文字幕在线播放| 欧美日韩美女在线| 最近2019年日本中文免费字幕| 欧美一级片久久久久久久| 日本成人精品在线| 国产精品狼人色视频一区| 伊人激情综合网| 久久精品国产亚洲一区二区| 欧美激情高清视频| 亚洲欧美日韩精品久久亚洲区| 久久影视电视剧免费网站| 92福利视频午夜1000合集在线观看| 亚洲xxxxx性| 欧洲精品久久久| 亚洲欧美激情一区| 亚洲美女在线看| 日韩在线观看成人| 国产视频亚洲精品| 国产视频丨精品|在线观看| 另类少妇人与禽zozz0性伦| 中文字幕亚洲综合久久筱田步美| 国产成人av网址| 亚洲国产精品女人久久久| 97久久精品人人澡人人爽缅北| 亚洲成人免费网站| 久久精品国产亚洲精品2020| 亚洲情综合五月天| 日韩精品在线免费观看| 亚洲精品一二区| 亚洲国产欧美在线成人app| 亚洲91精品在线观看| 亚洲缚视频在线观看| 欧美亚州一区二区三区| 午夜精品在线观看| 精品少妇一区二区30p| 久久精品久久久久久| 国产欧美va欧美va香蕉在线| 国内免费精品永久在线视频| 91精品久久久久久久久久久久久久| 国产精品美女久久久久久免费| 日韩视频一区在线| 亚洲欧美中文字幕| 久久精品国产久精国产思思| 国产精品第10页| 综合国产在线观看| 最近2019中文字幕第三页视频| 日韩大片免费观看视频播放| 国产精品美女午夜av| 色婷婷亚洲mv天堂mv在影片| 亚洲最大激情中文字幕| 日韩欧美在线网址| 欧美日韩国产精品一区二区不卡中文| 国产午夜精品视频| 欧美激情极品视频| 国产精品流白浆视频| 精品成人国产在线观看男人呻吟| 日韩av色在线|