程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#讀寫.ini文件

C#讀寫.ini文件

編輯:C#入門知識

C#讀寫.ini文件


C#代碼中要讀寫.ini文件,需要導入kernel32.dll中的GetPrivateProfileString和WritePrivateProfileString兩個函數。

 

 

首先,介紹一下kernel32.dll。

 

kernel32.dll是Windows9x/Me中非常重要的32位動態鏈接庫文件,屬於內核級文件。

 

它控制著系統的內存管理、數據的輸入輸出操作和中斷處理。

 

當Windows啟動時,kernel32.dll就駐留在內存中特定的寫保護區域,使別的程序無法占用這個內存區域。

 

 

接下來看一下GetPrivateProfileString和WritePrivateProfileString兩個函數的原型。

 

DWORD GetPrivateProfileString(

 

LPCTSTR lpAppName, // section name

 

LPCTSTR lpKeyName, // key name

 

LPCTSTR lpDefault, // default string

 

LPTSTR lpReturnedString, // destination buffer

 

DWORD nSize, // size of destination buffer

 

LPCTSTR lpFileName // initialization file name

 

);

 

 

參數說明:

 

lpAppName

 

[in] 指針指向一個空終止字符串,指定包含密鑰名節的名稱。如果該參數為NULL,GetPrivateProfileString功能將文件復制到提供的緩沖區中的所有部分的名稱。

 

 

lpKeyName

 

[in] 指向空終止字符串,指定其關聯的字符串鍵的名稱將被檢索。如果這個參數為NULL,由AppName的參數指定的部分的所有鍵名被復制到由返回的字符串參數指定的緩沖區。

 

 

lpDefault

 

[in] 指針指向一個空結束的默認字符串。如果lpKeyName密鑰不能在初始化文件中找到,GetPrivateProfileString副本的缺省字符串到lpReturnedString緩沖器。此參數不能為NULL。

 

 

lpReturnedString

 

[out] 指向接收所檢索的字符串的緩沖區。

 

 

nSize

 

[in] 指定的大小,以返回tchars,緩沖所指向lpReturnedString參數。

 

 

lpFileName

 

[in] 指針指向一個空終止字符串,指定初始化文件的名稱。如果該參數不包含文件的完整路徑,系統搜索在Windows目錄中的文件。

 

 

返回值:

 

返回值是復制到緩沖區,不包括終止空字符的字符數。

 

***************************************************************************************************************************************

 

CSDN中對幾個類型的解釋:

 

 

DWORD: A 32-bit unsigned integer or the address of a segment and its associated offset.

 

LPCTSTR:A 32-bit pointer to a constant character string that is portable for Unicode and DBCS.

 

LPTSTR :A 32-bit pointer to a character string that is portable for Unicode and DBCS.

 

 

LPCSTR: A 32-bit pointer to a constant character string.

 

LPSTR : A 32-bit pointer to a character string.

 

 

其中:

 

L: 表示long指針。

 

P: 表示這是一個指針。

 

T: 表示_T宏,這個宏用來表示你的字符是否使用UNICODE, 如果你的程序定義了UNICODE或者其他相關的宏,那麼這個字符或者字符串將被作為UNICODE字符串,否則就是標准的ANSI字符串。

 

STR:表示這個變量是一個字符串。

 

C: 表示是一個常量,const。

 

***************************************************************************************************************************************

 

C#導入DLL類型對應關系如下

 

 

c++:WORD ---- c#:ushort

 

c++:DWORD ---- c#:uint

 

c++:DWORD ---- c#:int

 

 

c++:LPCTSTR ---- c#:StringBuilder

 

c++:LPCTSTR ---- c#:string

 

c++:LPCSTR(const char*) ---- c#:System.String

 

 

c++:LPTSTR 輸出變量名 ---- c#:StringBuilder 輸出變量名

 

 

所以在C#導入GetPrivateProfileString函數時,由int代替DWORD;由string代替LPCTSTR;由StringBuilder輸出變量代替LPTSTR輸出變量。

 

 

得出:

 

DWORD GetPrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName,LPCTSTR lpDefault, LPTSTR lpReturnedString,DWORD nSize,LPCTSTR lpFileName);

 

變為:

 

public static extern int GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath);

 

*******************************************************************************************************************************************

 

最終使用:

 

[System.Runtime.InteropServices.DllImport(kernel32)]

 

public static extern int GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath);

 

 

public int ReadIni()

 

{

 

string str = D:\123.ini;

 

StringBuilder temp = new StringBuilder();

 

GetPrivateProfileString(ScreenOrder, LoginWindow, 1, temp, 255, str);

 

string str1 = temp.ToString();

 

int i = int.Parse(str1);

 

return i;

 

}

 

*******************************************************************************************************************************************

 

以上闡述了C#如何讀取.ini文件,對於C#寫入配置文件則非常相似,便不再贅述。

 

 

原型:

 

BOOL WritePrivateProfileString(

 

LPCTSTR lpAppName, // section name

 

LPCTSTR lpKeyName, // key name

 

LPCTSTR lpString, // string to add

 

LPCTSTR lpFileName // initialization file

 

);

 

 

根據以上闡述的C#導入C++ DLL的類型轉換可以得到C#中函數如下:

 

 

[System.Runtime.InteropServices.DllImport(kernel32)]

 

public static extern int WritePrivateProfileString(string Section, string Key, string Value, string iniFilePath);

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved