INI файлы в C++

Рейтинг: 4Ответов: 3Опубликовано: 03.05.2015

Как лучше и проще реализовать работу с ini файлами ? Именно интересует реализация структуры:

;comment
[section]
name=value

Можно ведь написать парсер использую функция для работы с файлами ? P.S. Не предлагайте готовые решения, кроме встроенных функций, т.к. хочется самому.

Ответы

▲ 6Принят

Вот ещё, pure C: iniparser. Умеет понимать довольно сложные случаи (документация).

dictionary * ini = iniparser_load( "config.ini" );
char * one = dictionary_get( ini, "first_section:one", "default" );
char * two = dictionary_get( ini, "second_section:two", NULL );
iniparser_freedict(ini);

Максимальная длина строки фиксирована, но её можно переопределить при сборке:

#define ASCIILINESZ (1024)

P.S. Что-то мне его допилить уже захотелось...

▲ 7

Точно не знаю, насколько глубоко вам хочется самому, и насколько низко (в смысле насколько низкоуровневых операций) вы готовы опуститься.

Если вы пишете для Windows и можете использовать WinAPI, тогда вы можете воспользоваться функциями GetPrivateProfileString и GetPrivateProfileInt.

Подробнее:

Если вы пишете кроссплатформенно и готовы использовать Boost, то просто возьмите Program_options.

Если вы хотите полностью реализовать парсер самостоятельно, посмотрите для вдохоновения проект inih. Лучше чем там написано, всё равно никто не напишет.

Ну и в завершение, для того чтобы ещё более расширить плюрализм мнений и многообразие выбора, схожий вопрос на SO, в котором вы найдёте множество других не менее интересных альтернатив:

▲ 2

Мне кажется, что действительно хорошая функция чтения конфигурации должна быть тесно связана с разбором аргументов командной строки и текущими переменными окружения (environment). Т.е. нужна возможность модификации конфигурационного файла переменными окружения и аргументами, с которыми вызывается программа.

Также привлекательна возможность после прочтения конфигурации сразу получать уже инициализированные из нее (с учетом модификации аргументами командной строки и environment) переменные программы.

Если интересно, попробуйте спроектировать такую штуку.