Advertisement
Advertisement


What is the easiest way to parse an INI File in C++?


Question

I'm trying to parse an INI file using C++. Any tips on what is the best way to achieve this? Should I use the Windows API tools for INI file processing (with which I am totally unfamiliar), an open-source solution or attempt to parse it manually?

2008/08/15
1
89
8/15/2008 7:31:01 PM

Accepted Answer

You can use the Windows API functions, such as GetPrivateProfileString() and GetPrivateProfileInt().

2008/08/15
112
8/15/2008 8:06:53 PM


I have never parsed ini files, so I can't be too specific on this issue.
But i have one advice:
Don't reinvent the wheel as long as an existing one meets your requirements

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

Good luck :)

2008/08/15

I use SimpleIni. It's cross-platform.

2015/10/30

If you are already using Qt

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

Then read a value

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

There are a bunch of other converter that convert your INI values into both standard types and Qt types. See Qt documentation on QSettings for more information.

2010/12/03

this question is a bit old, but I will post my answer. I have tested various INI classes (you can see them on my website) and I also use simpleIni because I want to work with INI files on both windows and winCE. Window's GetPrivateProfileString() works only with the registry on winCE.

It is very easy to read with simpleIni. Here is an example:

#include "SimpleIni\SimpleIni.h"    
CSimpleIniA ini;
ini.SetUnicode();
ini.LoadFile(FileName);
const char * pVal = ini.GetValue(section, entry, DefaultStr);
2009/12/26

inih is a simple ini parser written in C, it comes with a C++ wrapper too. Example usage:

#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";

The author has also a list of existing libraries here.

2013/08/13

Source: https://stackoverflow.com/questions/12633
Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Email: [email protected]