Какой самый простой способ для анализа файла INI в C ++? - PullRequest
85 голосов
/ 15 августа 2008

Я пытаюсь проанализировать INI-файл, используя C ++. Любые советы о том, как лучше всего добиться этого? Должен ли я использовать инструменты Windows API для обработки файлов INI (с которыми я совершенно незнаком), решение с открытым исходным кодом или попытаться разобрать его вручную?

Ответы [ 13 ]

113 голосов
/ 23 августа 2008

Если вам нужно кроссплатформенное решение, попробуйте Boost's Опции программы библиотека.

110 голосов
/ 16 августа 2008

Вы можете использовать функции Windows API, такие как GetPrivateProfileString () и GetPrivateProfileInt () .

22 голосов
/ 15 августа 2008

Я никогда не анализировал ini-файлы, поэтому не могу быть слишком конкретным в этом вопросе.
Но у меня есть один совет:
Не изобретайте велосипед, если существующий отвечает вашим требованиям

http://en.wikipedia.org/wiki/INI_file#Accessing_INI_files
http://sdl -cfg.sourceforge.net /
http://sourceforge.net/projects/libini/
http://www.codeproject.com/KB/files/config-file-parser.aspx

Удачи:)

16 голосов
/ 22 сентября 2008

Я использую SimpleIni . Это кроссплатформенный.

15 голосов
/ 03 декабря 2010

Если вы уже используете Qt

QSettings my_settings("filename.ini", QSettings::IniFormat);

Затем прочитайте значение

my_settings.value("GroupName/ValueName", <<DEFAULT_VAL>>).toInt()

Существует множество других конвертеров, которые преобразуют ваши значения INI как в стандартные типы, так и в типы Qt. Для получения дополнительной информации смотрите документацию Qt по QSettings.

8 голосов
/ 27 декабря 2009

этот вопрос немного устарел, но я выложу свой ответ. Я протестировал различные классы INI (вы можете увидеть их на моем веб-сайте ), и я также использую simpleIni, потому что я хочу работать с файлами INI как в Windows, так и в WinCE. GetPrivateProfileString () Windows работает только с реестром на winCE.

Очень просто читать с simpleIni. Вот пример:

#include "SimpleIni\SimpleIni.h"    
CSimpleIniA ini;
ini.SetUnicode();
ini.LoadFile(FileName);
const char * pVal = ini.GetValue(section, entry, DefaultStr);
5 голосов
/ 13 августа 2013

inih - это простой ini-парсер, написанный на C, он также поставляется с оболочкой C ++. Пример использования:

#include "INIReader.h"    

INIReader reader("test.ini");

std::cout << "version="
          << reader.GetInteger("protocol", "version", -1) << ", name="
          << reader.Get("user", "name", "UNKNOWN") << ", active="
          << reader.GetBoolean("user", "active", true) << "\n";

У автора также есть список существующих библиотек здесь .

4 голосов
/ 16 декабря 2008

Вы пробовали libconfig ; очень JSON-подобный синтаксис. Я предпочитаю это файлам конфигурации XML.

3 голосов
/ 18 марта 2013

Если вы заинтересованы в переносимости платформы, вы также можете попробовать Boost.PropertyTree. Он поддерживает ini как постоянный формат, хотя дерево свойств может быть только на 1 уровне глубины.

2 голосов
/ 16 августа 2008

Если вы не планируете сделать приложение кроссплатформенным, лучше всего использовать вызовы Windows API. Просто игнорируйте примечание в документации API о том, что оно предоставляется только для совместимости с 16-битными приложениями.

...