Click here to Skip to main content
11,576,064 members (58,174 online)
Click here to Skip to main content

How to read and write an INI File

, 17 Sep 2002 274.3K 9.1K 91
Rate this:
Please Sign up or sign in to vote.
List sections and section data (key-value pairs). Displays a key value and creates/modifies a key-value pair
<!-- Article image -->

Sample Image - INI.jpg

<!-- Add the rest of your HTML here -->

Introduction

CIniReader is a class that reads/writes from/to an INI file.

Details

Here are functions list of this class:

  • setINIFileName Sets the INI File name to read and write.
  • getKeyValue Used to retrieve a key value given the section and key name.
  • getSectionData Used to retrieve all key/value pairs of a given section.
  • getSectionNames Used to retrieve all the sections in an ini file
  • sectionExists Used to find out if a given section exists.
  • setKey Used to modify the key value or to create a key value pair for the specified section.

The functions in CIniReader use GetPrivateProfilexxx () functions to set, get information stored in an INI file. By having idea of the SDK functions like GetPrivateProfilexxx (), the functionality of the class can easily be extended.

Here is the CIniReader header file:

//
// CIniReader- Header File
//
class CIniReader  
{
public:
  // method to set INI file name, if not already specified 
  void setINIFileName(CString strINIFile);
  
  // methods to return the lists of section data and section names
  CStringList* getSectionData(CString strSection);
  CStringList* getSectionNames();
  
  // check if the section exists in the file
  BOOL sectionExists(CString strSection);

  // updates the key value, if key already exists, 
  // else creates a key-value pair
  long setKey(CString strValue, CString strKey, CString strSection);

  // give the key value for the specified key of a section
  CString getKeyValue(CString strKey,CString strSection);
  
  // default constructor
  CIniReader()
  {
    m_sectionList = new CStringList();
    m_sectionDataList = new CStringList();
  }
  
  CIniReader(CString strFile)
  {
    m_strFileName = strFile;
    m_sectionList = new CStringList();
    m_sectionDataList = new CStringList();
  }
  
  ~CIniReader()
  {
    delete m_sectionList;
    delete m_sectionDataList;
  }
  
private:
  // lists to keep sections and section data
  CStringList *m_sectionDataList;
  CStringList *m_sectionList;
  
  CString m_strSection;
  long m_lRetValue;
  
  // ini file name 
  CString m_strFileName;
};

How to use the class?

Demo project shows how to use the class. It takes from the user the fully qualified path and name of the INI file as C:\WINDOWS\ODBC.INI in the INI File name edit box. List Sections fills the list of sections in the INI file. Specifying any of the section names, and clicking the List Keys buttons will fill the second list box with the section data (all key and value pairs). Specifying a key name and pressing the Show Key Value button will display the value of the key. Update Key Value will update the modified value from the key value edit box for the key. If key not already present, update key value will create the specified key-value pair in the INI file. Be sure what you are doing, as it will modify the keys and values of INI.

Currently the buffer limit is up to 2000 characters, which can be increased according to the requirement.

After setting the INI file name just as the following code, you can proceed with using CIniReader functions:

// example of using the setINIFileName method
CIniReader  m_IniReader;
m_strINIFile = “C:\\WINDOWS\\ODBC.INI”;
m_IniReader.setINIFileName (m_strINIFile); 
That's it. The class is so simple and easy to use, I am sure you will have no problem.

    License

    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here

    Share

    About the Author

    Aisha Ikram
    Team Leader
    United Kingdom United Kingdom
    I am currently working as a Technical Lead in a software house in UK. I am Master in Science in Computer Science. I worked in .NET 1.1/2.0, C#, VB.NET, ASP.NET, VC++ 6, MFC, ATL, COM/DCOM, SQL Server 2000/2005. These days i am learning all .Net 3.x stuff. My free source code and articles website at http://aishai.netfirms.com

    You may also be interested in...

    Comments and Discussions

     
    QuestionThanks a lot! Pin
    3kboy2427-Jan-15 16:53
    member3kboy2427-Jan-15 16:53 
    GeneralMy vote of 4 Pin
    VEMS20-Nov-12 6:51
    memberVEMS20-Nov-12 6:51 
    GeneralGetPrivateprofileString fails while reading the value against certain sections if it is huge data against it. Pin
    deeps19859-May-11 2:37
    memberdeeps19859-May-11 2:37 
    GeneralOptimization on enumeration functions :) Pin
    Behzad Ebrahimi6-Nov-10 3:46
    memberBehzad Ebrahimi6-Nov-10 3:46 
    GeneralKey Count in INI file Pin
    April20048-Oct-10 18:52
    memberApril20048-Oct-10 18:52 
    AnswerRe: Key Count in INI file Pin
    Behzad Ebrahimi6-Nov-10 3:37
    memberBehzad Ebrahimi6-Nov-10 3:37 
    GeneralThanks Pin
    videoDev26-Aug-10 0:18
    membervideoDev26-Aug-10 0:18 
    NewsTry this one too Pin
    GamePlanner20-Apr-09 11:16
    memberGamePlanner20-Apr-09 11:16 
    GeneralRe: Try this one too Pin
    Behzad Ebrahimi6-Nov-10 3:50
    memberBehzad Ebrahimi6-Nov-10 3:50 
    GeneralINI file Pin
    saiful_vonair14-Apr-09 16:01
    membersaiful_vonair14-Apr-09 16:01 
    QuestionIs it possible to give the relative path of the ini file? Pin
    NILANKARAJA4-Dec-06 17:09
    memberNILANKARAJA4-Dec-06 17:09 
    AnswerRe: Is it possible to give the relative path of the ini file? Pin
    mr0x27-Feb-07 21:55
    membermr0x27-Feb-07 21:55 
    Generalthanks much Pin
    abalicaner21-Oct-05 20:59
    sussabalicaner21-Oct-05 20:59 
    GeneralGood work Pin
    Adnan Shaheen Yousaf Zai25-Sep-05 22:01
    memberAdnan Shaheen Yousaf Zai25-Sep-05 22:01 
    GeneralRe: Good work Pin
    Ejaz15-Oct-05 2:04
    memberEjaz15-Oct-05 2:04 
    GeneralRe: Good work Pin
    Behzad Ebrahimi6-Nov-10 3:40
    memberBehzad Ebrahimi6-Nov-10 3:40 
    GeneralRe: Good work Pin
    Ejaz15-Nov-10 17:18
    memberEjaz15-Nov-10 17:18 
    QuestionRemove a key? Pin
    momo727-Jun-05 22:18
    membermomo727-Jun-05 22:18 
    AnswerRe: Remove a key? Pin
    Lee Sung Ho20-Mar-06 22:20
    memberLee Sung Ho20-Mar-06 22:20 
    GeneralGood Article Pin
    Thiagarajan Rajendran4-Nov-04 19:02
    sussThiagarajan Rajendran4-Nov-04 19:02 
    GeneralError message from linker Pin
    walter1234566-Apr-03 2:02
    susswalter1234566-Apr-03 2:02 
    GeneralRe: Error message from linker Pin
    Aisha Ikram6-Apr-03 20:27
    memberAisha Ikram6-Apr-03 20:27 
    GeneralYou can use my class in your C++/Win32/MFC code Pin
    Aisha Ikram16-Mar-03 22:17
    sussAisha Ikram16-Mar-03 22:17 
    GeneralRe: You can use my class in your C++/Win32/MFC code Pin
    Kin Hoon17-Aug-03 7:40
    memberKin Hoon17-Aug-03 7:40 
    GeneralRequest to Author Pin
    Tom diep22-Jan-03 15:56
    sussTom diep22-Jan-03 15:56 
    GeneralRe: Request to Author Pin
    Anonymous22-Jan-03 15:58
    sussAnonymous22-Jan-03 15:58 
    GeneralRe: Request to Author Pin
    Christian Graus22-Jan-03 16:03
    memberChristian Graus22-Jan-03 16:03 
    GeneralRe: Request to Author Pin
    Anonymous22-Jan-03 16:04
    sussAnonymous22-Jan-03 16:04 
    GeneralRe: Request to Author Pin
    Christian Graus22-Jan-03 16:12
    memberChristian Graus22-Jan-03 16:12 
    GeneralRe: Request to Author Pin
    Anonymous22-Jan-03 16:28
    sussAnonymous22-Jan-03 16:28 
    GeneralRe: Request to Author Pin
    Christian Graus22-Jan-03 16:41
    memberChristian Graus22-Jan-03 16:41 
    Anonymous wrote:
    Are you saying that you have heard all the expression used in the world or any expression you never heard does not exist in this world?

    I was saying just that I'd never heard it before, but now I'm saying you're obviously stupid.

    Anonymous wrote:
    but if you try to read even 5000 entries with this class, it would be similar to read/write 100,000 entries, coz dead is dead

    I've not looked at the code, but either way, 5,000 or 100,000 are both an idiotic number of values to store in a flat file.


    Christian

    No offense, but I don't really want to encourage the creation of another VB developer.
    - Larry Antram 22 Oct 2002

    C# will attract all comers, where VB is for IT Journalists and managers - Michael
    P Butler 05-12-2002


    Again, you can screw up a C/C++ program just as easily as a VB program. OK, maybe not
    as easily, but it's certainly doable.
    - Jamie Nordmeyer - 15-Nov-2002
    GeneralRe: Request to Author Pin
    Anonymous22-Jan-03 16:49
    memberAnonymous22-Jan-03 16:49 
    GeneralRe: Request to Author Pin
    Christian Graus22-Jan-03 16:53
    memberChristian Graus22-Jan-03 16:53 
    GeneralRe: Request to Author Pin
    Anonymous22-Jan-03 16:59
    sussAnonymous22-Jan-03 16:59 
    GeneralRe: Request to Author Pin
    Christian Graus22-Jan-03 17:03
    memberChristian Graus22-Jan-03 17:03 
    GeneralRe: Request to Author Pin
    Anonymous22-Jan-03 17:11
    sussAnonymous22-Jan-03 17:11 
    GeneralRe: Request to Author Pin
    Aisha Ikram25-Jan-03 1:41
    memberAisha Ikram25-Jan-03 1:41 
    GeneralRe: Request to Author Pin
    Anonymous5-Feb-03 17:37
    sussAnonymous5-Feb-03 17:37 
    GeneralRe: Request to Author Pin
    WolfSupernova15-Jun-03 7:57
    memberWolfSupernova15-Jun-03 7:57 
    GeneralRe: Request to Author Pin
    rubbish@eezi.nl18-Mar-05 8:01
    memberrubbish@eezi.nl18-Mar-05 8:01 
    GeneralRe: Request to Author Pin
    iodus5-Oct-05 23:55
    memberiodus5-Oct-05 23:55 
    GeneralA very good article and code Pin
    Muhammad Ahmed27-Sep-02 2:33
    memberMuhammad Ahmed27-Sep-02 2:33 
    GeneralRe: A very good article and code Pin
    Aisha Ikram17-Nov-03 17:52
    memberAisha Ikram17-Nov-03 17:52 
    GeneralWon't work on SYSTEM.INI Pin
    Anonymous25-Sep-02 9:15
    sussAnonymous25-Sep-02 9:15 
    GeneralRe: Won't work on SYSTEM.INI Pin
    Aisha Ikram25-Sep-02 17:41
    memberAisha Ikram25-Sep-02 17:41 
    GeneralRe: Won't work on SYSTEM.INI Pin
    Anonymous26-Sep-02 10:55
    sussAnonymous26-Sep-02 10:55 
    GeneralRe: Won't work on SYSTEM.INI Pin
    Anonymous2-Nov-02 12:48
    sussAnonymous2-Nov-02 12:48 
    GeneralRe: Won't work on SYSTEM.INI Pin
    Anonymous7-Nov-02 23:19
    sussAnonymous7-Nov-02 23:19 
    GeneralRe: Won't work on SYSTEM.INI Pin
    Philippe Lhoste4-Dec-02 4:07
    memberPhilippe Lhoste4-Dec-02 4:07 
    GeneralGreat Job Pin
    Tili25-Sep-02 8:07
    memberTili25-Sep-02 8:07 

    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.

    | Advertise | Privacy | Terms of Use | Mobile
    Web04 | 2.8.150603.1 | Last Updated 18 Sep 2002
    Article Copyright 2002 by Aisha Ikram
    Everything else Copyright © CodeProject, 1999-2015
    Layout: fixed | fluid