Я изменяю существующее приложение C ++ и удаляю некоторые значения, которые в настоящее время жестко запрограммированы.
Я делаю это с одним классом, который будет "управлять" всем этим и хранить map<CString, CString>
значений из файла INI.
Сейчас я должен читать каждое значение отдельно, используя функцию ::GetPrivateProfileString
- могу ли я как-то прочитать весь раздел вместо одного значения?
Предпочитают не читать файл вручную, но если есть какой-либо разумный (то есть эффективный + простой в использовании) существующий способ, которым я открыт для предложений.
Редактировать: только что пришлось использовать его «по-настоящему», и решение действительно передавало NULL в качестве значения lpKeyName . Полный код, включая анализ возвращаемого значения:
char buffer[MAX_STRING_SIZE];
int charsCount = ::GetPrivateProfileString("MySection", NULL, NULL, buffer, MAX_STRING_SIZE, m_strIniPath);
CString curValue;
curValue.Empty();
char curChar = '\0';
for (int i = 0; i < charsCount; i++)
{
curChar = buffer[i];
if (curChar == '\0')
{
if (curValue.GetLength() > 0)
HandleValue(curValue);
curValue.Empty();
}
else
{
curValue.AppendFormat("%c", curChar);
}
}
if (curValue.GetLength() > 0)
HandleValue(curValue);
Это не тривиально, так как возвращает ключи, разделенные нулевым символом (EOS?), Поэтому мне пришлось извлечь их, используя цикл, подобный описанному выше - поделиться им здесь для всех, кому это может понадобиться. : -)