0

WriteProfileStringメソッドとは異なり、GetProfileStringセクションまたはオプションがプロファイルに存在するかどうかを確認する方法はありません。取得できるのはデフォルトの文字列だけです。私は自分のプロファイルを表すクラスを実装しようとしています。

BOOL HasSection(CString sSection)

そして

BOOL HasOption(CString sSection, CString sOption)

その中の方法。

4

1 に答える 1

1

やり方はとても簡単です。MSDN の記事をよくお読みください。最初または 2 番目のパラメーターに 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;
}

私はコードをテストしていません。プログラムから切り取って貼り付け、少し変更しただけです。コードを自分でテストしてください

于 2013-01-22T23:57:25.137 に答える