Click here to Skip to main content
Licence CPOL
First Posted 27 Jun 2005
Views 123,718
Bookmarked 56 times

A Small Class to Read INI File

By | 27 Jun 2005 | Article
A small class to read INI File, only has 4 methods: ReadInteger, ReadFloat, ReadBoolean, ReadString.

Introduction

I have written two classes CIniReader and CIniWriter. They are used to read and write .Ini files. They only have four methods, and are very simple and useful.

IniReader.h

#ifndef INIREADER_H
#define INIREADER_H
class CIniReader
{
public:
 CIniReader(char* szFileName); 
 int ReadInteger(char* szSection, char* szKey, int iDefaultValue);
 float ReadFloat(char* szSection, char* szKey, float fltDefaultValue);
 bool ReadBoolean(char* szSection, char* szKey, bool bolDefaultValue);
 char* ReadString(char* szSection, char* szKey, const char* szDefaultValue);
private:
  char m_szFileName[255];
};
#endif//INIREADER_H

IniReader.cpp

#include "IniReader.h"
#include <iostream>
#include <Windows.h>

CIniReader::CIniReader(char* szFileName)
{
 memset(m_szFileName, 0x00, 255);
 memcpy(m_szFileName, szFileName, strlen(szFileName));
}
int CIniReader::ReadInteger(char* szSection, char* szKey, int iDefaultValue)
{
 int iResult = GetPrivateProfileInt(szSection,  szKey, iDefaultValue, m_szFileName); 
 return iResult;
}
float CIniReader::ReadFloat(char* szSection, char* szKey, float fltDefaultValue)
{
 char szResult[255];
 char szDefault[255];
 float fltResult;
 sprintf(szDefault, "%f",fltDefaultValue);
 GetPrivateProfileString(szSection,  szKey, szDefault, szResult, 255, m_szFileName); 
 fltResult =  atof(szResult);
 return fltResult;
}
bool CIniReader::ReadBoolean(char* szSection, char* szKey, bool bolDefaultValue)
{
 char szResult[255];
 char szDefault[255];
 bool bolResult;
 sprintf(szDefault, "%s", bolDefaultValue? "True" : "False");
 GetPrivateProfileString(szSection, szKey, szDefault, szResult, 255, m_szFileName); 
 bolResult =  (strcmp(szResult, "True") == 0 || 
		strcmp(szResult, "true") == 0) ? true : false;
 return bolResult;
}
char* CIniReader::ReadString(char* szSection, char* szKey, const char* szDefaultValue)
{
 char* szResult = new char[255];
 memset(szResult, 0x00, 255);
 GetPrivateProfileString(szSection,  szKey, 
		szDefaultValue, szResult, 255, m_szFileName); 
 return szResult;
}

IniWriter.h

#ifndef INIWRITER_H
#define INIWRITER_H
class CIniWriter
{
public:
 CIniWriter(char* szFileName); 
 void WriteInteger(char* szSection, char* szKey, int iValue);
 void WriteFloat(char* szSection, char* szKey, float fltValue);
 void WriteBoolean(char* szSection, char* szKey, bool bolValue);
 void WriteString(char* szSection, char* szKey, char* szValue);
private:
 char m_szFileName[255];
};
#endif //INIWRITER_H

IniWriter.cpp

#include "IniWriter.h"
#include <iostream>
#include <Windows.h> 
CIniWriter::CIniWriter(char* szFileName)
{
 memset(m_szFileName, 0x00, 255);
 memcpy(m_szFileName, szFileName, strlen(szFileName));
}
void CIniWriter::WriteInteger(char* szSection, char* szKey, int iValue)
{
 char szValue[255];
 sprintf(szValue, "%d", iValue);
 WritePrivateProfileString(szSection,  szKey, szValue, m_szFileName); 
}
void CIniWriter::WriteFloat(char* szSection, char* szKey, float fltValue)
{
 char szValue[255];
 sprintf(szValue, "%f", fltValue);
 WritePrivateProfileString(szSection,  szKey, szValue, m_szFileName); 
}
void CIniWriter::WriteBoolean(char* szSection, char* szKey, bool bolValue)
{
 char szValue[255];
 sprintf(szValue, "%s", bolValue ? "True" : "False");
 WritePrivateProfileString(szSection,  szKey, szValue, m_szFileName); 
}
void CIniWriter::WriteString(char* szSection, char* szKey, char* szValue)
{
 WritePrivateProfileString(szSection,  szKey, szValue, m_szFileName);
}

Main.cpp

#include "iostream"
#include "IniWriter.h"
#include "IniReader.h"
int main(int argc, char * argv[])
{
 CIniWriter iniWriter(".\\Logger.ini");
 iniWriter.WriteString("Setting", "Name", "jianxx");   
 iniWriter.WriteInteger("Setting", "Age", 27); 
 iniWriter.WriteFloat("Setting", "Height", 1.82f); 
 iniWriter.WriteBoolean("Setting", "Marriage", false);  
 CIniReader iniReader(".\\Logger.ini");
 char *szName = iniReader.ReadString("Setting", "Name", "");   
 int iAge = iniReader.ReadInteger("Setting", "Age", 25); 
 float fltHieght = iniReader.ReadFloat("Setting", "Height", 1.80f); 
 bool bMarriage = iniReader.ReadBoolean("Setting", "Marriage", true); 
 
 std::cout<<"Name:"<<szName<<std::endl
   <<"Age:"<<iAge<<std::endl 
   <<"Height:"<<fltHieght<<std::endl 
   <<"Marriage:"<<bMarriage<<std::endl; 
 delete szName;  
 return 1;   
}

History

  • 27th June, 2005: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

xiaohe521

Web Developer

China China

Member

My Name is Xiangxiong Jian ,I love Programming ,And I love the sharing code

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralMy vote of 5 Pinmembersatthutinhoc22:50 30 Jul '11  
GeneralMy vote of 5 Pinmembermikkojay10:40 15 Sep '10  
QuestionKeep quotes? PinmemberMember 362156617:53 29 Apr '10  
GeneralAwesome! Pinmembersamaursa13:47 28 Nov '09  
GeneralRe: Awesome! Pinmembersamaursa13:49 28 Nov '09  
Questionwhy? PinmemberMember 430379910:26 4 Nov '09  
GeneralMy vote of 1 PinmemberJol16:20 1 Nov '09  
GeneralCannot Convert from Char* to LPCWSTR Pinmemberr_programmer1:28 11 Aug '09  
GeneralRe: Cannot Convert from Char* to LPCWSTR PinmemberBlaz3:40 10 Sep '09  
GeneralRe: Cannot Convert from Char* to LPCWSTR PinmemberBIGLY8:43 5 Oct '09  
GeneralRe: Cannot Convert from Char* to LPCWSTR PinmemberKendrick Hang13:42 26 Aug '10  
GeneralReading all the sections in a INI file PinmemberAl_S16:01 22 Jul '09  
GeneralThanks! [modified] Pinmemberburger8715:16 20 Apr '09  
QuestionRe: Thanks! [Please read previous post] Pinmemberburger8717:10 21 Apr '09  
Generalhel compile this code in visual c++ or in dev c++ Pinmemberdomyprogam0:34 30 Mar '09  
GeneralVery Helpful PinmemberMember 14688462:04 18 Jul '08  
GeneralThanks and congratulations Xiangxiong. Very simple, elegant code. Pinmemberkgaueee4:37 10 Oct '07  
GeneralEasy to use PinmemberSbarBaz23:22 3 May '07  
QuestionIs it possible to delete anything? Pinmemberhanne1234:15 19 Jan '07  
AnswerRe: Is it possible to delete anything? PinmemberNick Alexeev17:32 16 Aug '07  
There's a similar class that has a RemoveKey() method
http://www.codeproject.com/useritems/IniFileClass.asp[^]
GeneralWorks Great! Thank You! PinmemberMaster_God1:45 15 Jan '07  
GeneralTrouble Compiling Pinmemberjrpohl7:33 1 Sep '06  
GeneralRe: Trouble Compiling Pinmembermarshman20:35 15 Oct '06  
GeneralCorrect Path Pinmemberwaldermort2:27 4 Aug '06  
GeneralGood one dude. Pinmemberjayender23:23 10 Apr '06  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.5.120529.1 | Last Updated 27 Jun 2005
Article Copyright 2005 by xiaohe521
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid