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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c# ini file

發布時間:2024/6/21 C# 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c# ini file 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ini文件主要用于保存配置。之前一直以為是當作普通文本進行操作,讀取里面的內容,再自己解析讀取的文本。后來發現已經有寫好的api函數:WritePrivateProfileString()和GetPrivateProfileString()。

然后查看怎么使用,直到看到有人已經封裝成了類,直接使用即可。代碼源自一下鏈接,稍微做了下筆記,記錄于此。

參考鏈接:

  http://blog.csdn.net/geekwangminli/article/details/7851673

  http://www.cnblogs.com/zzyyll2/archive/2007/11/06/950584.html

IniFile.cs

using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices;namespace INIFILE {public abstract class CustomIniFile{public CustomIniFile(string AFileName){FFileName = AFileName;}private string FFileName;public string FileName{get { return FFileName; }}public virtual bool SectionExists(string Section){List<string> vStrings = new List<string>();ReadSections(vStrings);return vStrings.Contains(Section);}public virtual bool ValueExists(string Section, string Ident){List<string> vStrings = new List<string>();ReadSection(Section, vStrings);return vStrings.Contains(Ident);}public abstract string ReadString(string Section, string Ident, string Default);public abstract bool WriteString(string Section, string Ident, string Value);public abstract bool ReadSectionValues(string Section, List<string> Strings);public abstract bool ReadSection(string Section, List<string> Strings);public abstract bool ReadSections(List<string> Strings);public abstract bool EraseSection(string Section);public abstract bool DeleteKey(string Section, string Ident);public abstract bool UpdateFile();}/// <summary>/// 存儲本地INI文件的類。/// </summary>public class IniFile : CustomIniFile{[DllImport("kernel32")]private static extern uint GetPrivateProfileString(string lpAppName, // points to section name string lpKeyName, // points to key name string lpDefault, // points to default string byte[] lpReturnedString, // points to destination buffer uint nSize, // size of destination buffer string lpFileName // points to initialization filename );[DllImport("kernel32")]private static extern bool WritePrivateProfileString(string lpAppName, // pointer to section name string lpKeyName, // pointer to key name string lpString, // pointer to string to add string lpFileName // pointer to initialization filename );/// <summary>/// 構造IniFile實例。/// <param name="AFileName">指定文件名</param>/// </summary>public IniFile(string AFileName): base(AFileName){}/// <summary>/// 析夠IniFile實例。/// </summary>~IniFile(){UpdateFile();}/// <summary>/// 讀取字符串值。/// <param name="Ident">指定變量標識。</param>/// <param name="Section">指定所在區域。</param>/// <param name="Default">指定默認值。</param>/// <returns>返回讀取的字符串。如果讀取失敗則返回該值。</returns>/// </summary>/* 讀取key對應的value的值,如果對應的key不存在或者存在,但沒有等號,就是用默認值Default */public override string ReadString(string Section, string Ident, string Default){byte[] vBuffer = new byte[2048];uint vCount = GetPrivateProfileString(Section,Ident, Default, vBuffer, (uint)vBuffer.Length, FileName);return Encoding.Default.GetString(vBuffer, 0, (int)vCount);}/// <summary>/// 寫入字符串值。/// </summary>/// <param name="Section">指定所在區域。</param>/// <param name="Ident">指定變量標識。</param>/// <param name="Value">所要寫入的變量值。</param>/// <returns>返回寫入是否成功。</returns>public override bool WriteString(string Section, string Ident, string Value){return WritePrivateProfileString(Section, Ident, Value, FileName);}/// <summary>/// 獲得區域的完整文本。(變量名=值格式)。/// </summary>/// <param name="Section">指定區域標識。</param>/// <param name="Strings">輸出處理結果。</param>/// <returns>返回讀取是否成功。</returns>public override bool ReadSectionValues(string Section, List<string> Strings){List<string> vIdentList = new List<string>();// 先讀取某個section中所有的key值if (!ReadSection(Section, vIdentList)) return false;// 根據key值獲取value的值,并按照格式組成stringforeach (string vIdent in vIdentList)Strings.Add(string.Format("{0}={1}", vIdent, ReadString(Section, vIdent, "")));return true;}/// <summary>/// 讀取區域變量名列表。/// </summary>/// <param name="Section">指定區域名。</param>/// <param name="Strings">指定輸出列表。</param>/// <returns>返回獲取是否成功。</returns>/* 讀取某一個section中所有的key的值*/public override bool ReadSection(string Section, List<string> Strings){byte[] vBuffer = new byte[16384];//讀取整個section中的key值,存到vBuffer中uint vLength = GetPrivateProfileString(Section, null, null, vBuffer,(uint)vBuffer.Length, FileName);int j = 0;for (int i = 0; i < vLength; i++)if (vBuffer[i] == 0){//將byte類型轉成string,并保存到動態數組中, 按照0分開//byte內容如下,每個key通過00分隔//4E-61-6D-65-00-42-61-75-64-52-61-74-65-00-44-61-74-61-42-69-74-73-00-53-74-6F-70-42-69-74-73-00-47-5F-50-41-52-49-54-59//將一長串字符組成string,就是將2個00之間的byte內容組成string,并添加到動態數組中Strings.Add(Encoding.Default.GetString(vBuffer, j, i - j));j = i + 1;}return true;}/// <summary>/// 讀取區域名列表。/// </summary>/// <param name="Strings">指定輸出列表。</param>/// <returns></returns>/* 讀取的是中括號中的section名字 */public override bool ReadSections(List<string> Strings){byte[] vBuffer = new byte[16384];uint vLength = GetPrivateProfileString(null, null, null, vBuffer,(uint)vBuffer.Length, FileName);int j = 0;for (int i = 0; i < vLength; i++)if (vBuffer[i] == 0){// 將數組中第j~i個byte的內容轉成string,添加到list中Strings.Add(Encoding.Default.GetString(vBuffer, j, i - j));j = i + 1;}return true;}/// <summary>/// 刪除指定區域。/// </summary>/// <param name="Section">指定區域名。</param>/// <returns>返回刪除是否成功。</returns>/* 刪除整個section的內容 */public override bool EraseSection(string Section){return WritePrivateProfileString(Section, null, null, FileName);}/// <summary>/// 刪除指定變量。/// </summary>/// <param name="Section">變量所在區域。</param>/// <param name="Ident">變量標識。</param>/// <returns>返回刪除是否成功。</returns>/* 刪除之后,key和value的值都不存在 */public override bool DeleteKey(string Section, string Ident){return WritePrivateProfileString(Section, Ident, null, FileName);}/// <summary>/// 更新文件。/// </summary>/// <returns>返回更新是否成功。</returns>public override bool UpdateFile(){return WritePrivateProfileString(null, null, null, FileName);}} }

Profile.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace INIFILE {class Profile{public static void LoadProfile(){//獲取生成的可執行文件的目錄string strPath = AppDomain.CurrentDomain.BaseDirectory;_file = new IniFile(strPath + "Cfg.ini");G_BAUDRATE = _file.ReadString("CONFIG", "BaudRate", "4800"); //讀數據,下同G_DATABITS = _file.ReadString("CONFIG", "DataBits", "8");G_STOP = _file.ReadString("CONFIG", "StopBits", "1");G_PARITY = _file.ReadString("CONFIG", "Parity", "NONE");}public static void SaveProfile(){string strPath = AppDomain.CurrentDomain.BaseDirectory;_file = new IniFile(strPath + "Cfg.ini");_file.WriteString("CONFIG", "BaudRate", G_BAUDRATE); //寫數據,下同_file.WriteString("CONFIG", "DataBits", G_DATABITS);_file.WriteString("CONFIG", "StopBits", G_STOP);_file.WriteString("CONFIG", "G_PARITY", G_PARITY);}private static IniFile _file;//內置了一個對象public static string G_BAUDRATE = "1200";//給ini文件賦新值,并且影響界面下拉框的顯示public static string G_DATABITS = "8";public static string G_STOP = "1";public static string G_PARITY = "NONE";} }

Tony Liu

2016-9-26,Shenzhen

轉載于:https://www.cnblogs.com/helloworldtoyou/p/5910556.html

總結

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

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