国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

如何在C#中讀寫INI文件

2024-07-21 02:17:59
字體:
來源:轉載
供稿:網友

ini文件就是擴展名為“ini”的文件。在windows系統中,ini文件是很多,最重要的就是“system.ini”、“system32.ini”和“win.ini”。該文件主要存放用戶所做的選擇以及系統的各種參數。用戶可以通過修改ini文件,來改變應用程序和系統的很多配置。但自從windows 95的退出,在windows系統中引入了注冊表的概念,ini文件在windows系統的地位就開始不斷下滑,這是因為注冊表的獨特優點,使應用程序和系統都把許多參數和初始化信息放進了注冊表中。但在某些場合,ini文件還擁有其不可替代的地位。本文就來探討一下c#是如何對ini進行讀寫操作。

ini文件的結構
ini文件是一種按照特點方式排列的文本文件。每一個ini文件構成都非常類似,由若干段落(section)組成,在每個帶括號的標題下面,是若干個以單個單詞開頭的關鍵詞(keyword)和一個等號,等號右邊的就是關鍵字對應的值(value)。其一般形式如下:
[section1]
  keyword1 = valuel
  keyword2 = value2
   ……
  [section2]
  keyword3 = value3
  keyword4 = value4

c#和win32 api函數

c#并不像c++,擁有屬于自己的類庫。c#使用的類庫是.net框架為所有.net程序開發提供的一個共有的類庫——.net framework sdk。雖然.net framework sdk內容十分龐大,功能也非常強大,但還不能面面俱到,至少它并沒有提供直接操作ini文件所需要的相關的類。在本文中,c#操作ini文件使用的是windows系統自帶win32的api函數——writeprivateprofilestring()和getprivateprofilestring()函數。這二個函數都位于“kernel32.dll”文件中。

我們知道在c#中使用的類庫都是托管代碼(managed code)文件,而win32的api函數所處的文件,都是非托管代碼(unmanaged code)文件。這就導致了在c#中不可能直接使用這些非托管代碼文件中的函數。好在.net框架為了保持對下的兼容,也為了充分利用以前的資源,提出了互操作,通過互操作可以實現對win32的api函數的調用。互操作不僅適用于win32的api函數,還可以用來訪問托管的com對象。c#中對win32的api函數的互操作是通過命名空間“system.runtime.interopservices”中的“dllimport”特征類來實現的。它的主要作用是指示此屬性化方法是作為非托管dll的輸出實現的。下面代碼就是在c#利用命名空間“system.runtime.interopservices”中的“dllimport”特征類申明上面二個win32的api函數:

c#申明ini文件的寫操作函數writeprivateprofilestring():

[ dllimport ( "kernel32" ) ]
private static extern long writeprivateprofilestring ( string
section ,
string key , string val , string filepath ) ;

參數說明:section:ini文件中的段落;key:ini文件中的關鍵字;val:ini文件中關鍵字的數值;filepath:ini文件的完整的路徑和名稱。

c#申明ini文件的讀操作函數getprivateprofilestring():

[ dllimport ( "kernel32" ) ]
private static extern int getprivateprofilestring ( string section ,
string key , string def , stringbuilder retval ,
int size , string filepath ) ;

參數說明:section:ini文件中的段落名稱;key:ini文件中的關鍵字;def:無法讀取時候時候的缺省數值;retval:讀取數值;size:數值的大小;filepath:ini文件的完整路徑和名稱。

下面是一個讀寫ini文件的類
public class iniclass
{
public string inipath;
[dllimport("kernel32")]
private static extern long writeprivateprofilestring(string section,string key,string val,string filepath);
[dllimport("kernel32")]
private static extern int getprivateprofilestring(string section,string key,string def,stringbuilder retval,int size,string filepath);
/// <summary>
/// 構造方法
/// </summary>
/// <param name="inipath">文件路徑</param>
public iniclass(string inipath)
{
inipath = inipath;
}
/// <summary>
/// 寫入ini文件
/// </summary>
/// <param name="section">項目名稱(如 [typename] )</param>
/// <param name="key">鍵</param>
/// <param name="value">值</param>
public void iniwritevalue(string section,string key,string value)
{
writeprivateprofilestring(section,key,value,this.inipath);
}
/// <summary>
/// 讀出ini文件
/// </summary>
/// <param name="section">項目名稱(如 [typename] )</param>
/// <param name="key">鍵</param>
public string inireadvalue(string section,string key)
{
stringbuilder temp = new stringbuilder(500);
int i = getprivateprofilestring(section,key,"",temp,500,this.inipath);
return temp.tostring();
}
/// <summary>
/// 驗證文件是否存在
/// </summary>
/// <returns>布爾值</returns>
public bool existinifile()
{
return file.exists(inipath);
}
}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贵溪市| 库尔勒市| 衡山县| 阿勒泰市| 迁安市| 博野县| 永昌县| 东莞市| 高邮市| 华容县| 高雄县| 霞浦县| 徐闻县| 重庆市| 吴桥县| 桃园市| 康马县| 通榆县| 长宁县| 璧山县| 亚东县| 凤城市| 玛曲县| 上高县| 鄂伦春自治旗| 观塘区| 铜鼓县| 西乡县| 渭南市| 轮台县| 万全县| 新绛县| 彰武县| 旬邑县| 台北市| 电白县| 金阳县| 松原市| 黎平县| 大同县| 游戏|