Как прочитать записи файла конфигурации из файла INI

StackOverflow https://stackoverflow.com/questions/146795

  •  02-07-2019
  •  | 
  •  

Вопрос

Я не могу использовать Get*Profile функций, потому что я использую более старую версию SDK платформы Windows CE, в которой их нет.Это не должно быть слишком общим.

[section]
name = some string

Мне просто нужно открыть файл, проверить наличие «раздела» и значения, связанного с «именем».Стандартный C++ является предпочтительным.

Это было полезно?

Решение

Что я придумал:

std::wifstream file(L"\\Windows\\myini.ini");
if (file)
{
  bool section=false;
  while (!file.eof())
  {
    WCHAR _line[256];
    file.getline(_line, ELEMENTS(_line));
    std::wstringstream lineStm(_line);
    std::wstring &line=lineStm.str();
    if (line.empty()) continue;

    switch (line[0])
    {
      // new header
      case L'[':
      {
        std::wstring header;
        for (size_t i=1; i<line.length(); i++)
        {
          if (line[i]!=L']')
            header.push_back(line[i]);
          else
            break;
        }
        if (header==L"Section")
          section=true;
        else
          section=false;
      }
  break;
      // comments
      case ';':
      case ' ':
      case '#':
      break;
      // var=value
      default:
      {
        if (!section) continue;

        std::wstring name, dummy, value;
        lineStm >> name >> dummy;
        ws(lineStm);
        WCHAR _value[256];
        lineStm.getline(_value, ELEMENTS(_value));
        value=_value;
      }
    }
  }
}

Другие советы

Вам следует взглянуть на Boost.Program_options.У него есть функция parse_config_file, которая заполняет карту переменных.Именно то, что вам нужно!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top