与该WriteProfileString
方法不同,该GetProfileString
方法不提供检查配置文件中是否存在部分或选项的方法。我能得到的只是一个默认字符串。我正在尝试实现一个代表我的个人资料的类,我想要一个
BOOL HasSection(CString sSection)
和一个
BOOL HasOption(CString sSection, CString sOption)
里面的方法。
与该WriteProfileString
方法不同,该GetProfileString
方法不提供检查配置文件中是否存在部分或选项的方法。我能得到的只是一个默认字符串。我正在尝试实现一个代表我的个人资料的类,我想要一个
BOOL HasSection(CString sSection)
和一个
BOOL HasOption(CString sSection, CString sOption)
里面的方法。
这很容易做到。请仔细阅读MSDN 文章。请注意,当您将 NULL 传递给第一个或第二个参数时,该函数将返回所有部分名称(在前一种情况下)或键(在后一种情况下)的列表。
因此,要实现 HaseOption() 方法,您将拥有类似于此的代码:
BOOL HasSection(CString sSection)
{
DWORD dwSize = 100, dwRequired;
LPTSTR lpBuffer = new TCHAR[dwSize];
BOOL bExists = FALSE;
dwRequired = ::GetProfileString(NULL, NULL, _T(""), lpBuffer, dwSize);
while(dwRequired == dwSize - 2)
{
// buffer is too small
delete [] lpBuffer;
dwSize = dwRequired + 100;
lpBuffer = new TCHAR[dwSize];
dwRequired = ::GetProfileString(NULL, NULL, _T(""), lpBuffer, dwSize);
}
if(dwRequired)
{
LPTSTR lpszFound = lpBuffer;
do
{
if(sSection.CompareNoCase(lpszFound) == 0)
{
bExists = TRUE; break;
}
} while(*(lpszFound = _tcsninc(lpszFound, _tcsnbcnt(lpszFound, dwRequired)+1)));
}
delete [] lpBuffer;
return bExists;
}
我没有测试代码,只是从我的程序中剪切并粘贴并稍作修改。请自行测试代码