日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ini文件操作类

發布時間:2024/9/5 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ini文件操作类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?INI文件其實是一種具有特定結構的文本文件,它的構成分為三部分,文件由若干個段落(section)組成,每個段落又分成若干個鍵(key)和值(value),結構如下:

[Section1]
key?1?=?value2
key?1?=?value2
……
[Section2]
key?1?=?value1
key?2?=?value2
……

/// <summary> /// ini文件幫助類/// </summary> public class IniUtil{#region/// <summary>/// 獲取所有段落名稱/// </summary>/// <param name="lpszReturnBuffer">接受數據內存緩沖區指針</param>/// <param name="nSize">數據內存緩沖區最大大小</param>/// <param name="lpFileName">ini文件的路徑</param>/// <returns></returns> [SuppressUnmanagedCodeSecurity][DllImport("kernel32.dll", CharSet = CharSet.Auto)]public static extern int GetPrivateProfileSectionNames(IntPtr lpszReturnBuffer, uint nSize, string lpFileName);/// <summary>/// 獲取值(String)/// </summary>/// <param name="lpAppName">段落名稱</param>/// <param name="lpKeyName">鍵名稱</param>/// <param name="lpDefault">找不到時返回的值</param>/// <param name="lpReturnedString">接受數據字符串</param>/// <param name="nSize">數據內存緩沖區最大大小</param>/// <param name="lpFileName">ini文件的路徑</param>/// <returns></returns> [SuppressUnmanagedCodeSecurity][DllImport("kernel32.dll", CharSet = CharSet.Auto)]public static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);/// <summary>/// 獲取值(char[])/// </summary>/// <param name="lpAppName">段落名稱</param>/// <param name="lpKeyName">鍵名稱</param>/// <param name="lpDefault">找不到時返回的值</param>/// <param name="lpReturnedString">接受數據字符串</param>/// <param name="nSize">數據內存緩沖區最大大小</param>/// <param name="lpFileName">ini文件的路徑</param>/// <returns></returns> [SuppressUnmanagedCodeSecurity][DllImport("kernel32.dll", CharSet = CharSet.Auto)]public static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, [In, Out] char[] lpReturnedString, int nSize, string lpFileName);/// <summary>/// 獲取值(IntPtr)/// </summary>/// <param name="lpAppName">段落名稱</param>/// <param name="lpKeyName">鍵名稱</param>/// <param name="lpDefault">找不到時返回的值</param>/// <param name="lpReturnedString">接受數據字符串指針</param>/// <param name="nSize">數據內存緩沖區最大大小</param>/// <param name="lpFileName">ini文件的路徑</param>/// <returns></returns> [SuppressUnmanagedCodeSecurity][DllImport("kernel32.dll", CharSet = CharSet.Auto)]public static extern int GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, IntPtr lpReturnedString, uint nSize, string lpFileName);/// <summary>/// 獲取值(Int)/// </summary>/// <param name="lpAppName">段落名稱</param>/// <param name="lpKeyName">鍵名稱</param>/// <param name="lpDefault">找不到時返回的值</param>/// <param name="lpFileName">ini文件的路徑</param>/// <returns></returns> [SuppressUnmanagedCodeSecurity][DllImport("kernel32.dll", CharSet = CharSet.Auto)]public static extern int GetPrivateProfileInt(string lpAppName, string lpKeyName, int lpDefault, string lpFileName);/// <summary>/// 獲取指定段落/// </summary>/// <param name="lpAppName">段落名稱</param>/// <param name="lpReturnedString">接受數據字符串指針</param>/// <param name="nSize">數據內存緩沖區最大大小</param>/// <param name="lpFileName">ini文件的路徑</param>/// <returns></returns> [SuppressUnmanagedCodeSecurity][DllImport("kernel32.dll", CharSet = CharSet.Auto)]public static extern int GetPrivateProfileSection(string lpAppName, IntPtr lpReturnedString, uint nSize, string lpFileName);/// <summary>/// 獲取值(String)(WritePrivateProfileString通過SetLastError返回錯誤)/// </summary>/// <param name="lpAppName">段落名稱</param>/// <param name="lpKeyName">鍵名稱</param>/// <param name="lpString">鍵對應值</param>/// <param name="lpFileName">ini文件的路徑</param>/// <returns></returns>[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]public static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);#endregionprivate const int MaxSectionSize = 32767; // ini文件中一個段落(section)的最大大小。此屬性定義緩沖區的最大大小,用于從ini文件中檢索數據。這個值是win32函數GetPrivateProfileSectionNames()或GetPrivateProfileString ()允許的最大值。private string _path;//ini文件的路徑/// <summary>/// ini文件的物理路徑/// </summary>public string Path{get{return this._path;}}/// <summary>/// /// </summary>/// <param name="path">ini文件的相對路徑</param>public IniUtil(string path){this._path = System.IO.Path.GetFullPath(path);}/// <summary>/// 獲取指定段落指定鍵的值/// </summary>/// <param name="sectionName">段落名稱</param>/// <param name="keyName">鍵名稱</param>/// <param name="defaultValue">找不到時返回的值</param>/// <returns></returns>public string GetString(string sectionName, string keyName, string defaultValue){if (sectionName == null)throw new ArgumentNullException("sectionName");if (keyName == null)throw new ArgumentNullException("keyName");StringBuilder result = new StringBuilder(MaxSectionSize);GetPrivateProfileString(sectionName, keyName, defaultValue, result, MaxSectionSize, _path);return result.ToString();}/// <summary>/// 獲取指定段落指定鍵的值/// </summary>/// <param name="sectionName">段落名稱</param>/// <param name="keyName">鍵名稱</param>/// <param name="defaultValue">找不到時返回的值</param>/// <returns></returns>public int GetInt16(string sectionName, string keyName, short defaultValue){int retval = this.GetInt32(sectionName, keyName, defaultValue);return Convert.ToInt16(retval);}/// <summary>/// 獲取指定段落指定鍵的值/// </summary>/// <param name="sectionName">段落名稱</param>/// <param name="keyName">鍵名稱</param>/// <param name="defaultValue">找不到時返回的值</param>/// <returns></returns>public int GetInt32(string sectionName, string keyName, int defaultValue){if (sectionName == null)throw new ArgumentNullException("sectionName");if (keyName == null)throw new ArgumentNullException("keyName");return GetPrivateProfileInt(sectionName, keyName, defaultValue, _path);}/// <summary>/// 獲取指定段落指定鍵的值/// </summary>/// <param name="sectionName">段落名稱</param>/// <param name="keyName">鍵名稱</param>/// <param name="defaultValue">找不到時返回的值</param>/// <returns></returns>public double GetDouble(string sectionName, string keyName, double defaultValue){string retval = this.GetString(sectionName, keyName, "");if (retval == null || retval.Length == 0){return defaultValue;}return Convert.ToDouble(retval, CultureInfo.InvariantCulture);}/// <summary>/// 獲取指定段落的所有鍵值對/// </summary>/// <param name="sectionName">段落名稱</param>/// <returns></returns>public List<KeyValuePair<string, string>> GetSectionValuesAsList(string sectionName){if (sectionName == null)throw new ArgumentNullException("sectionName");List<KeyValuePair<string, string>> result;string[] keyValuePairs;string key, value;int equalSignPos;IntPtr ptr = Marshal.AllocCoTaskMem(MaxSectionSize);try{int len = GetPrivateProfileSection(sectionName, ptr, MaxSectionSize, _path);keyValuePairs = ConvertNullSeperatedStringToStringArray(ptr, len);}finally{Marshal.FreeCoTaskMem(ptr);}result = new List<KeyValuePair<string, string>>(keyValuePairs.Length);for (int i = 0; i < keyValuePairs.Length; ++i){equalSignPos = keyValuePairs[i].IndexOf('=');key = keyValuePairs[i].Substring(0, equalSignPos);value = keyValuePairs[i].Substring(equalSignPos + 1, keyValuePairs[i].Length - equalSignPos - 1);result.Add(new KeyValuePair<string, string>(key, value));}return result;}/// <summary>/// 獲取指定段落的所有鍵值對/// </summary>/// <param name="sectionName">段落名稱</param>/// <returns></returns>public Dictionary<string, string> GetSectionValues(string sectionName){if (sectionName == null)throw new ArgumentNullException("sectionName");Dictionary<string, string> result;List<KeyValuePair<string, string>> keyValuePairs;keyValuePairs = this.GetSectionValuesAsList(sectionName);result = new Dictionary<string, string>(keyValuePairs.Count);foreach (KeyValuePair<string, string> keyValuePair in keyValuePairs){if (!result.ContainsKey(keyValuePair.Key)){result.Add(keyValuePair.Key, keyValuePair.Value);}}return result;}/// <summary>/// 獲取指定段落的所有鍵名稱/// </summary>/// <param name="sectionName">段落名稱</param>/// <returns></returns>public string[] GetKeyNames(string sectionName){if (sectionName == null)throw new ArgumentNullException("sectionName");string[] result;int len;IntPtr ptr = Marshal.AllocCoTaskMem(MaxSectionSize);try{len = GetPrivateProfileString(sectionName, null, null, ptr, MaxSectionSize, _path);result = ConvertNullSeperatedStringToStringArray(ptr, len);}finally{Marshal.FreeCoTaskMem(ptr);}return result;}/// <summary>/// 獲取所有段落名稱/// </summary>/// <returns></returns>public string[] GetSectionNames(){string[] result;int len;IntPtr ptr = Marshal.AllocCoTaskMem(MaxSectionSize);try{len = GetPrivateProfileSectionNames(ptr, MaxSectionSize, _path);result = ConvertNullSeperatedStringToStringArray(ptr, len);}finally{Marshal.FreeCoTaskMem(ptr);}return result;}/// <summary>/// 指針數據轉換為字符串數組/// </summary>/// <param name="ptr">指向字符串數據的指針</param>/// <param name="valLength">指向指針的數據的長度</param>/// <returns></returns>private static string[] ConvertNullSeperatedStringToStringArray(IntPtr ptr, int valLength){string[] result;if (valLength == 0){result = new string[0];}else{string buff = Marshal.PtrToStringAuto(ptr, valLength - 1);//將緩沖區轉換為字符串。長度減少1,這樣我們就把第二個空移走了。result = buff.Split('\0');}return result;}/// <summary>/// 寫入鍵值到指定段落/// </summary>/// <param name="sectionName">段落名稱</param>/// <param name="keyName">鍵名稱</param>/// <param name="value"></param> private void WriteValueInternal(string sectionName, string keyName, string value){if (sectionName == null)throw new ArgumentNullException("sectionName");if (keyName == null)throw new ArgumentNullException("keyName");if (value == null)throw new ArgumentNullException("value");if (!WritePrivateProfileString(sectionName, keyName, value, _path)){throw new System.ComponentModel.Win32Exception();}}/// <summary>/// 寫入鍵值到指定段落/// </summary>/// <param name="sectionName">段落名稱</param>/// <param name="keyName">鍵名稱</param>/// <param name="value"></param>public void WriteValue(string sectionName, string keyName, string value){this.WriteValueInternal(sectionName, keyName, value);}/// <summary>/// 寫入鍵值到指定段落/// </summary>/// <param name="sectionName">段落名稱</param>/// <param name="keyName">鍵名稱</param>/// <param name="value"></param>public void WriteValue(string sectionName, string keyName, short value){this.WriteValue(sectionName, keyName, (int)value);}/// <summary>/// 寫入鍵值到指定段落/// </summary>/// <param name="sectionName">段落名稱</param>/// <param name="keyName">鍵名稱</param>/// <param name="value"></param>public void WriteValue(string sectionName, string keyName, int value){this.WriteValue(sectionName, keyName, value.ToString(CultureInfo.InvariantCulture));}/// <summary>/// 寫入鍵值到指定段落/// </summary>/// <param name="sectionName">段落名稱</param>/// <param name="keyName">鍵名稱</param>/// <param name="value"></param>public void WriteValue(string sectionName, string keyName, float value){this.WriteValue(sectionName, keyName, value.ToString(CultureInfo.InvariantCulture));}/// <summary>///寫入鍵值到指定段落 /// </summary>/// <param name="sectionName">段落名稱</param>/// <param name="keyName">鍵名稱</param>/// <param name="value"></param>public void WriteValue(string sectionName, string keyName, double value){this.WriteValue(sectionName, keyName, value.ToString(CultureInfo.InvariantCulture));}/// <summary>/// 刪除指定段落的鍵/// </summary>/// <param name="sectionName">段落名稱</param>/// <param name="keyName">鍵名稱</param>public void DeleteKey(string sectionName, string keyName){if (sectionName == null)throw new ArgumentNullException("sectionName");if (keyName == null)throw new ArgumentNullException("keyName");this.WriteValueInternal(sectionName, keyName, null);}/// <summary>/// 刪除指定段落/// </summary>/// <param name="sectionName">段落名稱</param>public void DeleteSection(string sectionName){if (sectionName == null)throw new ArgumentNullException("sectionName");this.WriteValueInternal(sectionName, null, null);}}

?

轉載于:https://www.cnblogs.com/tlmbem/p/11280179.html

總結

以上是生活随笔為你收集整理的ini文件操作类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。