ini文件也是一種配置文件,在早期的windows桌面系統中主要是用ini文件作為系統的配置文件,從win95以后開始轉向使用注冊表,但是還有很多系統配置是使用ini文件的。其實INI文件就是簡單的text文件,只不過這種txt文件要遵循一定的INI文件格式。“.ini ”就是英文 “initialization”的頭三個字母的縮寫;當然ini file的后綴名也不一定是".ini"也可以是".cfg",".conf ”或者是".txt"。
INI文件由節、鍵、值組成。
節
[section]
參數(鍵=值)
name=value
注解
注解使用分號表示(;)。在分號后面的文字,直到該行結尾都全部為注解。
NI文件的格式很簡單,最基本的三個要素是:parameters,sections和comments。
什么是parameters?
INI所包含的最基本的“元素”就是parameter;每一個parameter都有一個name和一個value,name和value是由等號“=”隔開。name在等號的左邊。
如:
name = value
什么是sections ?
所有的parameters都是以sections為單位結合在一起的。所有的section名稱都是獨占一行,並且sections名字都被方括號包圍着([ and ])。在section聲明后的所有parameters都是屬於該section。對於一個section沒有明顯的結束標志符,一個section的開始就是上一個section的結束,或者是end of the file。Sections一般情況下不能被nested,當然特殊情況下也可以實現sections的嵌套。
section如下所示:
[section]
什么是comments ?
在INI文件中注釋語句是以分號“;”開始的。所有的所有的注釋語句不管多長都是獨占一行直到結束的。在分號和行結束符之間的所有內容都是被忽略的。
注釋實例如下:
;comments text
了解了ini文件,接下來就是怎樣在代碼里面讀取文件內容的事情了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace TestReadIni
{
class Program
{
static void Main(string[] args)
{
String sPath = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
sPath = sPath.Substring(0, sPath.LastIndexOf("\\"));
string filename = sPath + "\\" + "SMALLERP.ini";
string strServer = GetIniFileString("DataBase", "Server", "",filename);
string strUserID = GetIniFileString("DataBase", "User", "",filename);
string strPwd = GetIniFileString("DataBase", "Password", "",filename);
WriteFile("DataBase", "Password","1",filename);
Console.WriteLine("Server = " + strServer);
Console.WriteLine("user = " + strUserID);
Console.WriteLine("Password = " + strPwd);
}
[DllImport("kernel32")]
public static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal,int size, string filePath);
[DllImport("kernel32")]
public static extern bool WritePrivateProfileString(string section, string key, string val, string filePath);
public static string GetIniFileString(string section, string key, string def, string filePath)
{
StringBuilder temp = new StringBuilder(1024);
GetPrivateProfileString(section, key, def, temp, 1024, filePath);
return temp.ToString();
}
public static void WriteFile(string section, string key, string value, string filePath)
{
WritePrivateProfileString(section,key,value,filePath);
}
}
}