1. 程式人生 > >C++ 配置檔案讀寫

C++ 配置檔案讀寫

void CAamsProtocol::WriteConfig()
{
	TCHAR tcExePath[MAX_PATH] = {0};  
	::GetModuleFileName(NULL, tcExePath, MAX_PATH);  
	// 設定ini路徑到exe同一目錄下  
#ifndef CONFIG_FILE  
#define CONFIG_FILE     (TEXT("Config.ini"))  
#endif  
	//_tcsrchr() 反向搜尋獲得最後一個'\\'的位置,並返回該位置的指標  
	TCHAR *pFind = _tcsrchr(tcExePath, '\\');  
	if (pFind == NULL)  
	{  
		return;  
	}  
	*pFind = '\0';  

	CString szIniPath = tcExePath;  
	szIniPath += "\\";  
	szIniPath += CONFIG_FILE;  

	//--------------------------------------------------------  
	//BOOL WritePrivateProfileString(  
	//                              LPCTSTR lpAppName,      //節的名字,是一個以0結束的字串  
	//                              LPCTSTR lpKeyName,      //鍵的名字,是一個以0結束的字串。若為NULL,則刪除整個節  
	//                              LPCTSTR lpString,       //鍵的值,是一個以0結束的字串。若為NULL,則刪除對應的鍵  
	//                              LPCTSTR lpFileName      //要寫入的檔案的檔名。若該ini檔案與程式在同一個目錄下,  
	//                              )                          也可使用相對路徑,否則需要給出絕度路徑。  
	//如果Ini不存在,它會自動在szIniPath上建立此INI檔案.再執行寫入.   
	CString ip1;
	ip1.Format(_T("%d"),(work.nSocketAddress & 0xFF000000) >> 24);
	CString ip2;
	ip2.Format(_T("%d"),(work.nSocketAddress & 0x00FF0000) >> 16);
	CString ip3;
	ip3.Format(_T("%d"),(work.nSocketAddress & 0x0000FF00) >> 8);
	CString ip4;
	ip4.Format(_T("%d"),(work.nSocketAddress & 0x000000FF) );
	::WritePrivateProfileString("Login", "ip1", ip1, szIniPath); 
	::WritePrivateProfileString("Login", "ip2", ip2, szIniPath); 
	::WritePrivateProfileString("Login", "ip3", ip3, szIniPath); 
	::WritePrivateProfileString("Login", "ip4", ip4, szIniPath); 
	CString port;
	port.Format(_T("%d"),work.nHostPort);
	::WritePrivateProfileString("Login", "port", port, szIniPath); 
	CString type;
	type.Format(_T("%d"),(int)work.type);
	::WritePrivateProfileString("Login", "worktype", type, szIniPath); 
	::WritePrivateProfileString("Login", "site", work.szSite, szIniPath);  
	::WritePrivateProfileString("Login", "user", work.szUser, szIniPath); 
}
void CAamsProtocol::ReadConfig()
{
	TCHAR tcExePath[MAX_PATH] = {0};  
	::GetModuleFileName(NULL, tcExePath, MAX_PATH);  
	// 設定ini路徑到exe同一目錄下  
#ifndef CONFIG_FILE  
#define CONFIG_FILE     (TEXT("Config.ini"))  
#endif  
	//_tcsrchr() 反向搜尋獲得最後一個'\\'的位置,並返回該位置的指標  
	TCHAR *pFind = _tcsrchr(tcExePath, '\\');  
	if (pFind == NULL)  
	{  
		return;  
	}  
	*pFind = '\0';  

	CString szIniPath = tcExePath;  
	szIniPath += "\\";  
	szIniPath += CONFIG_FILE; 

	if (!::PathFileExists(szIniPath))  
	{  
		AfxMessageBox(_T("配置檔案不存在!"));
		return;  
	}  

	int ip1 = ::GetPrivateProfileInt("Login", "ip1", 192, szIniPath);
	int ip2 = ::GetPrivateProfileInt("Login", "ip2", 168, szIniPath);
	int ip3 = ::GetPrivateProfileInt("Login", "ip3", 1, szIniPath);
	int ip4 = ::GetPrivateProfileInt("Login", "ip4", 42, szIniPath);
	work.nSocketAddress = ((ip1<<24) & 0xFF000000)+((ip2<<16) & 0x00FF0000)+((ip3<<8) & 0x0000FF00)+(ip4 & 0x000000FF);
	work.nHostPort = ::GetPrivateProfileInt("Login", "port", 6000, szIniPath);
	work.type = (EWorkType)::GetPrivateProfileInt("Login", "worktype", 0, szIniPath);
	::GetPrivateProfileString("Login", "site", "1", work.szSite, MAX_PATH, szIniPath);  
	::GetPrivateProfileString("Login", "user", "admin", work.szUser, MAX_PATH, szIniPath);
	::GetPrivateProfileString("Login", "password", "admin", work.szPassword, MAX_PATH, szIniPath);

}