使用`CWinApp :: GetProfileString()`时检查是否存在Sections / Options

时间:2013-01-22 09:39:02

标签: visual-c++ mfc

WriteProfileString方法不同,GetProfileString方法不提供检查配置文件中是否存在部分或选项的方法。我所能得到的只是一个默认字符串。我正在尝试实现一个代表我的个人资料的类,我希望有一个

BOOL HasSection(CString sSection)

BOOL HasOption(CString sSection, CString sOption)

方法。

1 个答案:

答案 0 :(得分:1)

这很容易做到。请仔细阅读MSDN Article。请注意,当您将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;
}

我没有测试过代码,只是从我的程序中剪切并修改了一下。请自行测试代码