INI文件的讀寫操作
?
在程序開發中,很多人會把參數保存為ini文件格式,ini文件的一個好處是可以保存為一個結構體主結構,如
[User]
Name=test
UserId=test
[Server]
ServerIp=127.0.0.1
ServerPort=80
……
?
很方便也很容易區分,而且不同節點下的名稱可以重復。讀取Name時只需要讀取User節點下的Name。
ini文件的讀寫是需要調用windows的API來操作的。該API方法是在kernel32.dll中。
?
讀ini文件調用
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder refVal,int size, string filePath);
參數說明:
section:INI文件中的段落名稱;
key:INI文件中的關鍵字;
def:無法讀取時候時候的缺省數值;
retVal:讀取數值;
size:數值的大小;
filePath:INI文件的完整路徑和名稱
?
寫ini文件調用
?[DllImport("kernel32")]
??????? private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
參數說明:
section:INI文件中的段落;
key:INI文件中的關鍵字;
val:INI文件中關鍵字的數值;
filePath:INI文件的完整的路徑和名稱
?
???????
具體代碼如下:
?
{
????private?static?string?sIniFile?=?Path.Combine(Path.GetDirectoryName(Application.ExecutablePath),?"Config.ini");
??//參數說明:section:INI文件中的段落;key:INI文件中的關鍵字;val:INI文件中關鍵字的數值;filePath:INI文件的完整的路徑和名稱
??private?static?extern?long?WritePrivateProfileString(string?section,?string?key,?string?val,?string?filePath);??????
???//參數說明:section:INI文件中的段落名稱;key:INI文件中的關鍵字;def:無法讀取時候時候的缺省數值;retVal:讀取數值;
???[DllImport("kernel32")]
????private?static?extern?int?GetPrivateProfileString(string?section,?string?key,?string?def,?StringBuilder?refVal,?int?size,?string?filePath);??????
public?static?string?sUserId?=””;
public?static?string?sServerIp?=””;
public?static?string?sServerPort?=””;?
#region?寫入配置文件節
///?<summary>
///?寫入配置文件節
///?</summary>
public?static?long?WriteProfileString(string?sSection,?string?sKey,?string?sVal,?string?sFileName)
{
?????return?WritePrivateProfileString(sSection,?sKey,?sVal,?sFileName);
}
#endregion?
#region?讀取配置文件節
///?<summary>
///?讀取配置文件節
///?</summary>
public?static?long?GetProfileString(string?sSection,?string?sKey,?ref?string?refVal,?string?sFileName)
{
????StringBuilder?sVal?=?new?StringBuilder();
????long?lResult?=?GetPrivateProfileString(sSection,?sKey,?refVal,?sVal,?255,?sFileName);
????refVal?=?sVal.ToString();
????return?lResult;
}
#endregion?
#region?寫入INI文件節
///?<summary>
///?寫入INI文件節
///?</summary>
public?static?long?WriteIniFileString(string?sSection,?string?sKey,?string?sVal)
{
????if?(string.IsNullOrEmpty(sVal))
????{
?????????return?-1;
????}
????return?WritePrivateProfileString(sSection,?sKey,?sVal,?sIniFile);
}
#endregion?
#region?讀取INI文件節
///?<summary>
///?讀取INI文件節
///?</summary>
public?static?long?GetIniFileString(string?sSection,?string?sKey,?ref?string?refVal)
{
????StringBuilder?sVal?=?new?StringBuilder(2048,?2048);
????long?lResult?=?GetPrivateProfileString(sSection,?sKey,?refVal,?sVal,?1024,?sIniFile);
????refVal?=?sVal.ToString();
????return?lResult;
}
#endregion
#region?讀取配置文件
///?<summary>
///?讀取配置文件
///?</summary>
public?static?bool?ReadIniFile()
{
????try
???????//?User
???????GetIniFileString("User",?"UserId",?ref?sUserId);
???????GetIniFileString("User",?"Name",?ref?sName);?
???????//?Server
???????GetIniFileString("Server",?"ServerIp",?ref?sServerIp);
???????GetIniFileString("Server",?"ServerPort",?ref?sPort);
???????return?true;
????}
????catch?(Exception?ex)
????{
????????return?false;
????}
}
#endregion?
#region?寫入配置文件
///?<summary>
///?寫入配置文件
///?</summary>
public?static?bool?WriteIniFile()
{
???try
???{
????????//?User
????????WriteIniFileString("User",?"UserId",?sUserId);
????????WriteIniFileString("User",?"Name",?sName);?
????????//?Server
????????WriteIniFileString("Server",?"ServerIp",?sServerIp);
????????WriteIniFileString("Server",?"ServerPort",?sPort);
????????return?true;
????}
????catch?(Exception?ex)
????{
????????return?false;
????}
}
#endregion
}
?