我们都知道在VC里可以通过Windows API函数GetPrivateProfileString()、WritePrivateProfileString()来读写Ini文件,但其实MFC写好的CWinApp类里也具备读写Ini文件的能力,而且使用更为方便。对应的函数是CWinApp::GetProfileString()、CWinApp::WriteProfileString(),但是默认情况下,这两个函数是去操作注册表的,下面的方法就是使它们转而读写与exe文件相同路径下的Ini文件:
/**
* 初始化CWinApp的Ini文件名,之后就可以直接用AfxGetApp()->GetProfileXXX()来读写Ini文件。
*/
BOOL CMyApp::InitIniFile()
{
char szProgName[MAX_PATH];
int iNiValue = 0;
iNiValue = GetModuleFileName(0, szProgName, sizeof(szProgName));
if (iNiValue <= 0)
{
return FALSE;
}
szProgName[strlen(szProgName) - 3] = '\0';
strcat(szProgName, "ini");
// 清除Ini变量
free((void*)m_pszProfileName);
m_pszProfileName = _tcsdup(_T(szProgName));
// 清除注册表键值变量所分配的内存空间
free((void*)m_pszRegistryKey);
m_pszRegistryKey = NULL;
return TRUE;
}
* 初始化CWinApp的Ini文件名,之后就可以直接用AfxGetApp()->GetProfileXXX()来读写Ini文件。
*/
BOOL CMyApp::InitIniFile()
{
char szProgName[MAX_PATH];
int iNiValue = 0;
iNiValue = GetModuleFileName(0, szProgName, sizeof(szProgName));
if (iNiValue <= 0)
{
return FALSE;
}
szProgName[strlen(szProgName) - 3] = '\0';
strcat(szProgName, "ini");
// 清除Ini变量
free((void*)m_pszProfileName);
m_pszProfileName = _tcsdup(_T(szProgName));
// 清除注册表键值变量所分配的内存空间
free((void*)m_pszRegistryKey);
m_pszRegistryKey = NULL;
return TRUE;
}