1. 程式人生 > >C++,ini檔案操作(包含類)

C++,ini檔案操作(包含類)

initialization File,即為初始化檔案,是windows的系統配置檔案所採用的儲存格式,統管windows的各項配置。或者作為專案中的配置檔案,為整個專案所共用。

檔案格式為 節、鍵、值。其中節為[Section name], 引數為 key(鍵)=value(值)。

ini檔案中註解使用分號表示(;),在分號後面的文字,直到該行結尾都全部為註解。

[Section Name]用來表示一個段落,INI檔案可能是專案中共用的,所以使用[Section Name]段名來區分不同用途的引數區。key就用來表示引數名,value表示對應的值。

ini檔案讀

1、從系統的win.ini檔案中讀取資訊

(1) 讀取字串

DWORD GetProfileString(

LPCTSTR lpAppName, // 節名【不區分大小寫】

LPCTSTR lpKeyName, // 鍵名,讀取該鍵的值【不區分大小寫

LPCTSTR lpDefault, // 若指定的鍵不存在,該值作為讀取的預設值

LPTSTR lpReturnedString, // 一個指向緩衝區的指標,接收讀取的字串

DWORD nSize // 指定lpReturnedString指向的緩衝區的大小

)

如:

CString str;

::GetProfileString("Test","id","Error",str.GetBuffer(20),20);

(2) 讀取整數

UINT GetProfileInt(

LPCTSTR lpAppName, // 同上

LPCTSTR lpKeyName, // 同上

INT nDefault // 若指定的鍵名不存在,該值作為讀取的預設值

)

2 從自己的ini檔案中讀取資訊

函式原型

DWORD GetPrivateProfileString(string lpszSection,string lpszKey,string lpszDefault, lpszReturnBuffer, cchReturnBuffer, lpszFile)

GetPrivateProfileString("DBInfo","IP","",IP.GetBuffer(MAX_PATH),MAX_PATH,iniFilePath);【測過】

CString IP, iniFilePath.

GetPrivateProfileString(Section name,key,"",key.GetBuffer(MAX_PATH),MAX_PATH,ini檔案路徑+檔名);

其中第一個引數為段名,第二個引數為引數名稱,第三個引數為沒找到key返回的預設值,第四個引數為指定一個字串緩衝區,第五個引數為指定裝載到lpReturnedString緩衝區的最大字元數量,第六個引數為初始化檔案的名字,如沒有指定一個完整路徑名,windows就在Windows目錄中查詢檔案。

__inline DWORD GetPrivateProfileString(

LPCTSTR lpAppName,

LPCTSTR lpKeyName,

LPCTSTR lpDefault,

LPTSTR lpReturnedString,

DWORD nSize,

LPCTSTR lpFileName

)

DWORDGetPrivateProfileInt (string lpszSection,string lpszKey,long lpszDefault, lpszFile) 為初始化檔案中指定的條目獲取一個整數值,引數列表跟上文取String一致,而第三個引數是如果找不到則返回一個預設的long型別的值。

特別注意的是 如果找到的數字不是一個合法的整數,函式會返回其中合法的一部分。比如“xyz=55zz”這個條目,函式返回55。

UINT GetPrivateProfileInt(
LPCTSTR lpAppName,
LPCTSTR lpKeyName,
INT nDefault,
LPCTSTR lpFileName
);

寫INI檔案

1. 把資訊寫入系統的win.ini檔案

BOOL WriteProfileString(

LPCTSTR lpAppName, // 節的名字,是一個以0結束的字串

LPCTSTR lpKeyName, // 鍵的名字,是一個以0結束的字串。若為NULL,則刪除整個節

LPCTSTR lpString // 鍵的值,是一個以0結束的字串。若為NULL,則刪除對應的鍵

)

2. 把資訊寫入自己定義的.ini檔案

BOOL WritePrivateProfileString(

LPCTSTR lpAppName, // 同上

LPCTSTR lpKeyName, // 同上

LPCTSTR lpString, // 同上

LPCTSTR lpFileName // 要寫入的檔案的檔名。若該ini檔案與程式在同一個目錄下,也可使用相對

//路徑,否則需要給出絕度路徑。

)

如:

::WriteProfileString("Test","id","xym");

//在win.ini中建立一個Test節,並在該節中建立一個鍵id,其值為xym

::WritePrivateProfileString("Test","id","xym","d:\\vc\\Ex1\\ex1.ini");

//在Ex1目錄下的ex1.ini中建立一個Test節,並在該節中建立一個鍵id,其值為xym

//若Ex1.ini檔案與讀寫該檔案的程式在同一個目錄下,則上面語句也可寫為:

::WritePrivateProfileString("Test","id","xym",".\\ex1.ini");

需要注意的是,C系列的語言中,轉義字元'\\'表示反斜線'\'。另外,當使用相對路徑時,\\前的.號不能丟掉了。