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系列的語言中,轉義字元'\\'表示反斜線'\'。另外,當使用相對路徑時,\\前的.號不能丟掉了。