- 讀取
- 讀取字符
DWORD GetPrivateProfileString(
LPCTSTR lpAppName, // INI文件中的一個字段名[節名]可以有很多個節名LPCTSTR lpKeyName, // lpAppName 下的一個鍵名,也就是里面具體的變量名
LPCTSTR lpDefault, // 如果lpReturnedString為空,則把個變量賦給lpReturnedString
LPTSTR lpReturnedString, // 存放鍵值的指針變量,用於接收INI文件中鍵值(數據)的接收緩沖區
DWORD nSize, // lpReturnedString的緩沖區大小
LPCTSTR lpFileName // INI文件的路徑
); - 讀取整型值 (返回值為讀到的整)
UINT GetPrivateProfileInt(
LPCTSTR lpAppName, // INI文件中的一個字段名[節名]可以有很多個節名
LPCTSTR lpKeyName, // lpAppName 下的一個鍵名,也就是里面具體的變量名
INT nDefault, // 如果沒有找到指定的數據返回,則把個變量值賦給返回值LPCTSTR lpFileName // INI文件的路徑
);
- 寫入
- 寫入字符
BOOL WritePrivateProfileString(
LPCTSTR lpAppName, // INI文件中的一個字段名[節名]可以有很多個節名LPCTSTR lpKeyName, // lpAppName 下的一個鍵名,也就是里面具體的變量名
LPCTSTR lpString, // 鍵值,也就是數據
LPCTSTR lpFileName // INI文件的路徑
); - 寫入整型
- 讀寫INI文件時相對路徑和絕對路徑都可以,根據實際情況選擇
"..\\IniFileName.ini" // 這樣的為相對路徑
"D:\\IniFileName.ini" // 這樣的為絕對路徑
- MAX_PATH:是微軟最大路徑占的字節所設的宏
寫入的ini文件 分為:節、鍵名、鍵值
舉個栗子:
// XX.ini
[串口配置]
波特率=19200
有了理論,再看看實踐的demo:
- 寫INI文件:
LPTSTR lpPath = new char[MAX_PATH];
strcpy(lpPath, "D:\\IniFileName.ini");
WritePrivateProfileString("LiMing", "Sex", "Man", lpPath);
WritePrivateProfileString("LiMing", "Age", "20", lpPath);
WritePrivateProfileString("Fangfang", "Sex", "Woman", lpPath);
WritePrivateProfileString("Fangfang", "Age", "21", lpPath);
delete [] lpPath;
INI文件如下:
[LiMing]
Sex=Man
Age=20
[Fangfang]
Sex=Woman
Age=21
- 讀INI文件:
TCHAR FPath[128];
::GetCurrentDirectory(MAX_PATH, FPath);
strcat(FPath, ".\\Config.ini");
CFile ConfigFile;
if(!ConfigFile.Open(FPath, CFile::modeCreate||CFile::modeRead, NULL))
{
AfxMessageBox("打開Config.ini配置文件失敗!!!");
return FALSE;
}
ConfigFile.Close();
LPTSTR lpPath = new char[MAX_PATH];
LPTSTR LiMingSex = new char[6];
int LiMingAge;
LPTSTR FangfangSex = new char[6];
int FangfangAge;
strcpy(lpPath, "..\\IniFileName.ini");
GetPrivateProfileString("LiMing", "Sex", "", LiMingSex, 6, lpPath);
LiMingAge = GetPrivateProfileInt("LiMing", "Age", 0, lpPath);
GetPrivateProfileString("Fangfang", "Sex", "", FangfangSex, 6, lpPath);
FangfangAge = GetPrivateProfileInt("Fangfang", "Age", 0, lpPath);
delete [] lpPath;
寫入.ini文件:bool WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString,LPCTSTR lpFileName);
讀取.ini文件:DWORD GetPrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpDefaut,LPSTR lpReturnedString,DWORD nSize,LPCTSTR lpFileName);
讀取整形值:UINT GetPrivateProfileInt(LPCTSTR lpAppName,LPCTSTR lpKeyName,INT nDefault,LPCTSTR lpFileName);
其中個參數的意思:
LPCTSTR lpAppName ------- INI文件中的一個字段名
LPCTSTR lpKeyName -------- lpAppName 下的一個鍵名,也就是里面具體的變量名
LPCTSTR lpString ---------是鍵值,也就是變量的值, 必須為LPCTSTR或CString類型
LPCTSTR lpFileName --------完整的INI文件路徑名
LPCTSTR lpDefaut ----------如果沒有其前兩個參數值,則將此值賦給變量
LPSTR lpReturnedString --------接收INI文件中的值的CString對象,即接收緩沖區
DWORD nSize ------接收緩沖區的大小
例子:
CString StrName,Strtemp;
int nAge;
StrName = "jacky";
nAge = 13;
WritePrivateProfileString("Student","Name",StrName,"c:\\setting.ini");
結果:(INI文件中顯示如下:)
[Student]
Name=jacky
讀取:
CString SName;
GetPrivateProfileString("Student","Name","DefaultName",SName.GetBuffer(MAX_LENGTH),MAX_LENGTH,"c:\\setting.ini");
結果:SName = "jacky";這里需要注意點就是用完GetBuffer函數后一定要釋放(用SName.ReleaseBuffer()函數),不然后面再用到SName的其他子函數就會失靈。
讀整數比較簡單,如下
int Result = GetPrivateProfileInt("Student","nAge",0,"c:\\setting.ini")返回值即為所讀取的結果!
在GetPrivateProfileString最后一個參數是配置文件路徑的參數,此路徑只能是絕對路徑,不能是相對路徑,但現在我需要是我的exe文件能和我的配置文件在一起。因此我使用了GetCurrentDirectory函數。
原代碼如下:
CString server_ip;
CString des="";
::GetCurrentDirectory(MAX_PATHLENGTH,des.GetBuffer(MAX_PATHLENGTH));
des.ReleaseBuffer();
des+="\\config.ini";
GetPrivateProfileString("PhoneDemo","Server_IP","",server_ip.GetBufferSetLength(15),15,des);
server_ip.ReleaseBuffer();
注意:在這里使用CString變量時,在使用完GetBuffer后,緊接着一定要使用ReleaseBuffer()函數,才可以進行其他的諸如字符串+操作;