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

INI Manipulation using C

, 22 Aug 2006
Rate this:
Please Sign up or sign in to vote.
Using C to read and write INI file
Sample Image - Screen.jpg


This project uses C and linklist to implement and manage INI files. This project is a sample of linklist implementation.

Sample Usage

    buffer = get_value("Main","PLC");
    printf("value : %s\n",buffer);
    printf("last error is %s\n",get_last_error());

How To Implement

This project uses linklist to make a sample tree for collecting INI file data. INI file in this project must separate using "=". This is a sample function to manage INI file.

/* main ini manage function                                             */
 *    function: ini_start                                                        
 *    parameter:                                                        
 *        @filename                                                            
 *    return:    true if success
 *    purpose: for start ini manipulate file
bool ini_start(const char* filename);

 *    function:    load                                                    
 *    parameter:                                                        
 *        @filename                                                            
 *    return:        true if success
 *    purpose:    for load ini file to content

bool load(const char *filename);

 *    function:    _save                                                    
 *    parameter:                                                        
 *        @filename                                                            
 *    return:        true if success
 *    purpose:    save content to ini file(save as)
bool save();    // save to load filebool 
bool save_as(const char *filename);

 *    function:    get_value                                                    
 *    parameter:                                                        
 *        @                                                            
 *    return:        value
 *    purpose:    ?                                                    
char *get_value (const char *sec,const char *key);
char *_get_value(const char *sec,const char *key,   // return data and comment
                 char *comment);
 *    function:    set_value
 *    parameter:                                                        
 *        @                                                            
 *    return:        true if success
 *    purpose:            
bool set_value  (const char *sec,const char *key,        // will auto replace
                 const char *value);    
bool _set_value (const char *sec,const char *key,    // select replace or not replace
                 const char *value,const char *comment,REPLACE_FLAG flag);

int  remove_sel (const char *sec,char *key);
int  remove_all (const char * sec);                // remove all record in section

// add/remove section
void add_section(const char *sec,const char *comment);    // add section
int  remove_section(char *sec);  	// remove section (remove all record 
				// in section if not empty)

void clear();                                	// clear all content

// size of section
int  content_size();
int  section_size(char *sec);

// for console display use stdio.h stdout
void print_content();                        	// print all content
void print_section();                        	// print all only section
void print_record(char *sec,char *key);   	// print selection record
void print_allrecord(char *sec);            	// print all record in section

 *    function: ini_end                                                    
 *    parameter:                                                        
 *        none                                                                    
 *    return:    void                                                        
 *    purpose: for end ini manipulate file
void ini_end();
void _ini_end(REPLACE_FLAG flag);

 *    function: get_last_error
 *    parameter:                                                        
 *        none                                                            
 *    return:    type of error   
 *    purpose:    for get error      
char *get_last_error();


  • 22nd August, 2006: Initial post


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

About the Author

Web Developer
Thailand Thailand
C++,Window,Linux Programming
Measurement and Control System.

Comments and Discussions

Questionversion for Linux ? Pinmemberdereach26-Jan-09 0:18 
AnswerRe: version for Linux ? PinmemberTooBaya16-Apr-09 17:48 
GeneralBest and Simple INI Manipulation I ever Seen Pinmemberlv4415-May-08 7:16 
Generalcfind a bug Pinmemberyangqi.cn11-Sep-06 23:10 
Generalimplementation... Pinmemberoleg54222-Aug-06 21:03 
GeneralThank for comment PinmemberTooBaya22-Aug-06 20:49 
GeneralRe: Thank for comment PinmemberDaTxomin22-Aug-06 20:56 
GeneralYou can use Win32 SDK functions ... PinmemberRobert W.22-Aug-06 20:39 
GeneralRe: You can use Win32 SDK functions ... Pinmemberyama no mura9-Oct-07 21:55 
NewsINI files are dead PinmemberToby Opferman22-Aug-06 20:21 
In Windows there does exist an API to manipulate INI files (GetPrivateProfileString, etc.) however there is the 64k limitation for which a direct implementation of reading the files would be required.
In anycase INI files were WIN16's version of the registery and were supposed to have died with WIN16. Although they carried through early versions of Windows 9x, they have been used less and less. The new trend in file configurations is XML. Most newer applications and OS components are starting to use it more and more. I would look into XML as a better alternative to INI files for configuration. They are much more flexible and more powerful.


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 | Mobile
Web04 | 2.8.140709.1 | Last Updated 23 Aug 2006
Article Copyright 2006 by TooBaya
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid