CIniFile - Class for Reading and Writing .INI Files | CodeGuru

CIniFile – Class for Reading and Writing .INI Files

. In every program I have written, I end up using some sort of INI file to keep settings from one run to the next. Instead of implementing it separately in each program, I finally got around to writing this class, CIniFile. It is simple to set up and use: After you create your CIniFile […]

Written By
CodeGuru Staff
CodeGuru Staff
Mar 5, 2003
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

.

In every program I have written, I end up using some sort of INI file to keep settings from one run to the next. Instead of implementing it separately in each program, I finally got around to writing this class, CIniFile. It is simple to set up and use:

After you create your CIniFile object, call the member function SetPath(CString newpath) to set the path/filename for the ini file to read from and write to.

To read the INI file data into the class, call ReadFile().

To retrieve data from the class, use GetValue or one of its overloads:

//returns value of keyname/valuename as CString
CString GetValue(CString keyname, CString valuename);

//returns value of keyname/valuename as int
int GetValueI(CString keyname, CString valuename);

//returns value of keyname/valuename as double
double GetValueF(CString keyname, CString valuename);

To set data values in the class, call SetValue or one of its overloads:

bool SetValue(CString key,
              CString valuename,
              CString value, bool create = 1);

bool SetValueI(CString key,
               CString valuename,
               int value,
               bool create = 1);

bool SetValueF(CString key,
               CString valuename,
               double value,
               bool create = 1);

Use the optional parameter; create as false if you do not want it to create the key/value if it doesn’t already exist.

SetValue returns TRUE if the value was successfully stored, false otherwise.

To delete a value from the class, call DeleteValue(CString keyname, CString valuename). This function will return true if the value is deleted, false otherwise.

To delete an entire key from the class, call DeleteKey(CString keyname). This function will return true if the key is deleted, false otherwise.

To remove all data stored in the class, call Reset().

Other useful functions are GetNumKeys(), which returns the number of keys in the INI file, and GetNumValues(CString keyname), which returns the number of values stored in the specified key.

Finally, to write all your stored data to the specified INI file, call WriteFile().

Thats it! It is simple.

Here is a complete listing of the functions included in the class:

//default constructor
CIniFile();

//constructor, can specify pathname here instead of
//using SetPath later
CIniFile(CString inipath);

//default destructor
virtual ~CIniFile();

//sets path of ini file to read and write from
void SetPath(CString newpath);

//reads ini file specified using CIniFile::SetPath()
//returns true if successful, false otherwise
bool ReadFile();

//writes data stored in class to ini file
void WriteFile();

//deletes all stored ini data
void Reset();

//returns number of keys currently in the ini
int GetNumKeys();

//returns number of values stored for specified key
int GetNumValues(CString keyname);

//gets value of [keyname] valuename =
//overloaded to return CString, int, and double,
//returns, or 0 if key/value not found. Sets error
//member to show problem
CString GetValue(CString keyname, CString valuename);
int GetValueI(CString keyname, CString valuename);
double GetValueF(CString keyname, CString valuename);

//sets value of [keyname] valuename =.
//specify the optional paramter as false (0) if you do not
//want it to create the key if it doesn't exist. Returns true
//if data entered, false otherwise overloaded to accept CString,
//int, and double
bool SetValue(CString key,
              CString valuename,
              CString value,
              bool create = 1);

bool SetValueI(CString key,
               CString valuename,
               int value,
               bool create = 1);

bool SetValueF(CString key,
               CString valuename,
               double value,
               bool create = 1);

//deletes specified value
//returns true if value existed and deleted, false otherwise
bool DeleteValue(CString keyname, CString valuename);

//deletes specified key and all values contained within
//returns true if key existed and deleted, false otherwise
bool DeleteKey(CString keyname);

Downloads

Download demo project and source – 8KB

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.