Click here to Skip to main content
Click here to Skip to main content

A Small Class to Read INI File

By , 27 Jun 2005
 

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

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 5memberMember 995379625 Apr '13 - 2:36 
GeneralShort and sweet.memberFunctino29 Nov '12 - 14:31 
Questionyes very good but how do I download? lolmemberfran kener15 Sep '12 - 3:41 
GeneralMy vote of 5membersatthutinhoc30 Jul '11 - 22:50 
GeneralMy vote of 5membermikkojay15 Sep '10 - 10:40 
QuestionKeep quotes?memberMember 362156629 Apr '10 - 17:53 
GeneralAwesome!membersamaursa28 Nov '09 - 13:47 
GeneralRe: Awesome!membersamaursa28 Nov '09 - 13:49 
Questionwhy?memberMember 43037994 Nov '09 - 10:26 
GeneralMy vote of 1memberJol1 Nov '09 - 16:20 
GeneralCannot Convert from Char* to LPCWSTRmemberr_programmer11 Aug '09 - 1:28 
GeneralRe: Cannot Convert from Char* to LPCWSTRmemberBlaz10 Sep '09 - 3:40 
GeneralRe: Cannot Convert from Char* to LPCWSTRmemberBIGLY5 Oct '09 - 8:43 
GeneralRe: Cannot Convert from Char* to LPCWSTRmemberKendrick Hang26 Aug '10 - 13:42 
GeneralReading all the sections in a INI filememberAl_S22 Jul '09 - 16:01 
GeneralThanks! [modified]memberburger8720 Apr '09 - 15:16 
QuestionRe: Thanks! [Please read previous post]memberburger8721 Apr '09 - 17:10 
Generalhel compile this code in visual c++ or in dev c++memberdomyprogam30 Mar '09 - 0:34 
GeneralVery HelpfulmemberMember 146884618 Jul '08 - 2:04 
GeneralThanks and congratulations Xiangxiong. Very simple, elegant code.memberkgaueee10 Oct '07 - 4:37 
GeneralEasy to usememberSbarBaz3 May '07 - 23:22 
QuestionIs it possible to delete anything?memberhanne12319 Jan '07 - 4:15 
AnswerRe: Is it possible to delete anything?memberNick Alexeev16 Aug '07 - 17:32 
GeneralWorks Great! Thank You!memberMaster_God15 Jan '07 - 1:45 
GeneralTrouble Compilingmemberjrpohl1 Sep '06 - 7:33 

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

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