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

首頁 > 編程 > C# > 正文

C#讀寫INI文件的方法

2020-01-24 01:26:52
字體:
來源:轉載
供稿:網友

本文實例講述了C#讀寫INI文件的方法。分享給大家供大家參考。具體如下:

雖然微軟早已經建議在WINDOWS中用注冊表代替INI文件,但是在實際應用中,INI文件仍然有用武之地,尤其現在綠色軟件的流行,越來越多的程序將自己的一些配置信息保存到了INI文件中。

INI文件是文本文件,由若干節(section)組成,在每個帶括號的標題下面,是若干個關鍵詞(key)及其對應的值(Value)

[Section]
Key=Value

VC中提供了API函數進行INI文件的讀寫操作,但是微軟推出的C#編程語言中卻沒有相應的方法,下面是一個C# ini文件讀寫類,從網上收集的,很全,就是沒有對section的改名功能,高手可以增加一個。

using System;using System.IO;using System.Runtime.InteropServices;using System.Text;using System.Collections;using System.Collections.Specialized;namespace wuyisky{ /// <summary> /// IniFiles的類 /// </summary> public class IniFiles {  public string FileName; //INI文件名  //聲明讀寫INI文件的API函數  [DllImport("kernel32")]  private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath);  [DllImport("kernel32")]  private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath);  //類的構造函數,傳遞INI文件名  public IniFiles(string AFileName)  {   // 判斷文件是否存在   FileInfo fileInfo = new FileInfo(AFileName);   //Todo:搞清枚舉的用法   if ((!fileInfo.Exists))   { //|| (FileAttributes.Directory in fileInfo.Attributes))    //文件不存在,建立文件    System.IO.StreamWriter sw = new System.IO.StreamWriter(AFileName, false, System.Text.Encoding.Default);    try    {     sw.Write("#表格配置檔案");     sw.Close();    }    catch    {     throw (new ApplicationException("Ini文件不存在"));    }   }   //必須是完全路徑,不能是相對路徑   FileName = fileInfo.FullName;  }  //寫INI文件  public void WriteString(string Section, string Ident, string Value)  {   if (!WritePrivateProfileString(Section, Ident, Value, FileName))   {    throw (new ApplicationException("寫Ini文件出錯"));   }  }  //讀取INI文件指定  public string ReadString(string Section, string Ident, string Default)  {   Byte[] Buffer = new Byte[65535];   int bufLen = GetPrivateProfileString(Section, Ident, Default, Buffer, Buffer.GetUpperBound(0), FileName);   //必須設定0(系統默認的代碼頁)的編碼方式,否則無法支持中文   string s = Encoding.GetEncoding(0).GetString(Buffer);   s = s.Substring(0, bufLen);   return s.Trim();  }  //讀整數  public int ReadInteger(string Section, string Ident, int Default)  {   string intStr = ReadString(Section, Ident, Convert.ToString(Default));   try   {    return Convert.ToInt32(intStr);   }   catch (Exception ex)   {    Console.WriteLine(ex.Message);    return Default;   }  }  //寫整數  public void WriteInteger(string Section, string Ident, int Value)  {   WriteString(Section, Ident, Value.ToString());  }  //讀布爾  public bool ReadBool(string Section, string Ident, bool Default)  {   try   {    return Convert.ToBoolean(ReadString(Section, Ident, Convert.ToString(Default)));   }   catch (Exception ex)   {    Console.WriteLine(ex.Message);    return Default;   }  }  //寫Bool  public void WriteBool(string Section, string Ident, bool Value)  {   WriteString(Section, Ident, Convert.ToString(Value));  }  //從Ini文件中,將指定的Section名稱中的所有Ident添加到列表中  public void ReadSection(string Section, StringCollection Idents)  {   Byte[] Buffer = new Byte[16384];   //Idents.Clear();   int bufLen = GetPrivateProfileString(Section, null, null, Buffer, Buffer.GetUpperBound(0),     FileName);   //對Section進行解析   GetStringsFromBuffer(Buffer, bufLen, Idents);  }  private void GetStringsFromBuffer(Byte[] Buffer, int bufLen, StringCollection Strings)  {   Strings.Clear();   if (bufLen != 0)   {    int start = 0;    for (int i = 0; i < bufLen; i++)    {     if ((Buffer[i] == 0) && ((i - start) > 0))     {      String s = Encoding.GetEncoding(0).GetString(Buffer, start, i - start);      Strings.Add(s);      start = i + 1;     }    }   }  }  //從Ini文件中,讀取所有的Sections的名稱  public void ReadSections(StringCollection SectionList)  {   //Note:必須得用Bytes來實現,StringBuilder只能取到第一個Section   byte[] Buffer = new byte[65535];   int bufLen = 0;   bufLen = GetPrivateProfileString(null, null, null, Buffer,    Buffer.GetUpperBound(0), FileName);   GetStringsFromBuffer(Buffer, bufLen, SectionList);  }  //讀取指定的Section的所有Value到列表中  public void ReadSectionValues(string Section, NameValueCollection Values)  {   StringCollection KeyList = new StringCollection();   ReadSection(Section, KeyList);   Values.Clear();   foreach (string key in KeyList)   {    Values.Add(key, ReadString(Section, key, ""));   }  }  ////讀取指定的Section的所有Value到列表中,  //public void ReadSectionValues(string Section, NameValueCollection Values,char splitString)  //{  string sectionValue;  //  string[] sectionValueSplit;  //  StringCollection KeyList = new StringCollection();  //  ReadSection(Section, KeyList);  //  Values.Clear();  //  foreach (string key in KeyList)  //  {  //    sectionValue=ReadString(Section, key, "");  //    sectionValueSplit=sectionValue.Split(splitString);  //    Values.Add(key, sectionValueSplit[0].ToString(),sectionValueSplit[1].ToString());  //  }  //}  //清除某個Section  public void EraseSection(string Section)  {   if (!WritePrivateProfileString(Section, null, null, FileName))   {    throw (new ApplicationException("無法清除Ini文件中的Section"));   }  }  //刪除某個Section下的鍵  public void DeleteKey(string Section, string Ident)  {   WritePrivateProfileString(Section, Ident, null, FileName);  }  //Note:對于Win9X,來說需要實現UpdateFile方法將緩沖中的數據寫入文件  //在Win NT, 2000和XP上,都是直接寫文件,沒有緩沖,所以,無須實現UpdateFile  //執行完對Ini文件的修改之后,應該調用本方法更新緩沖區。  public void UpdateFile()  {   WritePrivateProfileString(null, null, null, FileName);  }  //檢查某個Section下的某個鍵值是否存在  public bool ValueExists(string Section, string Ident)  {   StringCollection Idents = new StringCollection();   ReadSection(Section, Idents);   return Idents.IndexOf(Ident) > -1;  }  //確保資源的釋放  ~IniFiles()  {   UpdateFile();  } }}

目前C# 對ini文件操作基本上要被xml文件取代了,但是我覺得ini文件的讀寫仍然是編程的基本,是必須會的

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲iv一区二区三区| 久久久久女教师免费一区| 欧洲亚洲妇女av| 久久久久久久久久久免费精品| 91精品啪在线观看麻豆免费| 中文字幕在线日韩| 国产成人精品国内自产拍免费看| 中文字幕欧美日韩va免费视频| 欧美又大粗又爽又黄大片视频| 91成人性视频| 亚洲一区二区久久久久久久| 91精品国产99久久久久久| 欧美日韩成人黄色| 精品久久久久久久久久| 国产精品久久久久久久久久久久久久| 欧美激情精品在线| 一区二区三区 在线观看视| 77777亚洲午夜久久多人| 国产欧美一区二区三区久久人妖| 日韩精品久久久久久久玫瑰园| 91精品国产99久久久久久| 日韩高清电影免费观看完整版| 国产精品视频色| 久久久伊人日本| 国产精品网址在线| 日韩精品视频在线播放| 日韩中文字幕在线视频播放| 国产精品国语对白| 久久久久久国产精品美女| 欧美中文在线观看| 97涩涩爰在线观看亚洲| 久久人91精品久久久久久不卡| 欧美猛少妇色xxxxx| 久久久精品网站| 久久久亚洲影院你懂的| 国模精品视频一区二区| 欧美wwwwww| 色悠久久久久综合先锋影音下载| 亚洲人在线观看| 蜜臀久久99精品久久久无需会员| 北条麻妃一区二区三区中文字幕| 久久精品国产电影| 青青a在线精品免费观看| 亚洲精品福利资源站| 91九色单男在线观看| 中文字幕亚洲色图| 国产精品十八以下禁看| 久久国产精品视频| 亚洲精品国产精品自产a区红杏吧| 欧美成年人视频网站| 久久久国产成人精品| 伊人亚洲福利一区二区三区| 久久夜精品香蕉| 欧美极品在线播放| 久久视频在线视频| 欧美午夜精品久久久久久人妖| 91精品国产色综合久久不卡98| 亚洲第一页自拍| 久久久精品视频在线观看| 狠狠躁夜夜躁久久躁别揉| 色青青草原桃花久久综合| 精品国模在线视频| 国产精品入口日韩视频大尺度| 色综合久久天天综线观看| 91精品国产自产在线| 中文字幕亚洲图片| 91九色综合久久| 91麻豆国产语对白在线观看| 久青草国产97香蕉在线视频| 第一福利永久视频精品| 日韩视频―中文字幕| 精品视频在线播放免| 日本不卡免费高清视频| 日韩经典中文字幕在线观看| 亚洲网站在线播放| 最新69国产成人精品视频免费| 久久久人成影片一区二区三区| 欧美高清无遮挡| 国产经典一区二区| 欧美成人精品激情在线观看| 日韩免费电影在线观看| 欧美成人免费va影院高清| 欧美成人合集magnet| 欧美视频国产精品| 日韩在线观看网址| 久久理论片午夜琪琪电影网| 国产午夜精品视频免费不卡69堂| 懂色av影视一区二区三区| 庆余年2免费日韩剧观看大牛| 97成人精品视频在线观看| 亚洲三级黄色在线观看| 丝袜美腿精品国产二区| 日韩在线不卡视频| 国产中文字幕日韩| 国产日韩av在线播放| 免费99精品国产自在在线| 成人av色在线观看| 国产99久久精品一区二区| 91在线色戒在线| 国产精品三级在线| 97人人模人人爽人人喊中文字| 国产在线视频91| 亚洲成人久久久| 亚洲一区二区久久久久久久| 亚洲影院色在线观看免费| 日韩欧美国产免费播放| 日韩精品在线电影| 国产在线观看不卡| 亚洲精品久久7777777| 亚洲无av在线中文字幕| 色综合久久88色综合天天看泰| 日韩欧美国产激情| 深夜精品寂寞黄网站在线观看| www日韩中文字幕在线看| 久久av.com| 亚洲天堂第二页| 黑人巨大精品欧美一区二区| 久久99精品久久久久久噜噜| 亚洲人成电影网站色www| 国产精品自拍视频| 亚洲国产三级网| xxxxx成人.com| 中文字幕无线精品亚洲乱码一区| 1769国产精品| 欧美亚洲午夜视频在线观看| 日韩中文在线中文网在线观看| 久99久在线视频| 欧美激情精品久久久久久蜜臀| 亚洲精品中文字幕有码专区| 久久黄色av网站| 国产女人18毛片水18精品| 亚洲老司机av| 亚洲国产精品悠悠久久琪琪| 懂色av一区二区三区| 国产日产欧美精品| 性色av香蕉一区二区| 在线播放国产一区二区三区| 成人精品福利视频| 欧美亚洲成人精品| 国产精品99久久99久久久二8| 疯狂做受xxxx高潮欧美日本| 91在线视频免费| 91精品国产91久久久久久吃药| 欧美日韩亚洲一区二区三区| 国产精品va在线| 日韩黄色av网站| 亚洲桃花岛网站| 亚洲男人天堂2023| 国产精品一区二区久久| 国产亚洲a∨片在线观看| 国产色婷婷国产综合在线理论片a| 欧美专区在线视频| 97国产真实伦对白精彩视频8| 欧美成人免费一级人片100| 久久久久国产一区二区三区| 国产精品电影网站| 美女啪啪无遮挡免费久久网站| 欧美日韩aaaa| 一区二区成人av| 亚洲精品suv精品一区二区| 亚洲人永久免费| 亚洲图片在线综合| 久久久久久久久久久免费精品| 日韩电影免费在线观看中文字幕|