Jump to content

Recommended Posts

Posted

 

 

EasyConfig C++ Class

 

 

Config files such as *.ini You'll see it's not hard at all to use it.

Please note that there are 2 constructors, an empty one that doesn't require any argument and another one that takes the file name.

If you declare an object without any file name, you'll have to use the SetFileName method.

 

Here's an exemple:

(

cpp):
#include "stdafx.h"

using namespace std;

int main(int argc, char* argv[])
{
ConfigFile myIni;

myIni.SetFileName("C:\\Hax.txt");

cout << myIni.ReadStringValue("LOL", "value1").c_str() << endl;

    cout << "Writing int into value2..." << endl;

    myIni.WriteValue("LOL", "value2", 1337);
    cout << myIni.ReadIntValue("LOL", "value2") << endl;

    cout << "Writing float into value3..." << endl;

    myIni.WriteValue("LOL", "value3", 3.14f);
    cout << myIni.ReadFloatValue("LOL", "value3") << endl;

    return 0;
}

 

 

 

WriteValue is an overloaded function that works with float, int and strings which is actually what I needed.

The code launches a ConfigFileException when shit happens.

 

For exemple:

 

(cpp):
ConfigFile myIni;

cout << myIni.ReadStringValue("LOL", "value1").c_str() << endl;

 

 

In this code, we didn't set a file name. The code will launch an exception that contains,

The file name (In this case, it's ) And the error description To avoid unhandled...

Exceptions:

(cpp):
ConfigFile myIni;

try
{
cout << myIni.ReadStringValue("LOL", "value1").c_str() << endl;
}
catch( ConfigFileException e )
{
cout << "*** EXCEPTION CAUGHT ***"<< endl;
cout << e.fileName << endl;
cout << e.errMessage<< endl;
}

 

 

 

I added the exceptions stuff today, so if you find anything i could add/correct, just say And now, the file you're all waiting for:

EasyCfg.cpp:

(cpp):
#pragma once

#define FILE_NOT_EXISTING        "The file you tried to open doesn't exist"
#define FILENAME_NOT_DEFINED    "You didn't declare a file name"
#define NO_FILE_NAME            "<no File Name>"

class ConfigFileException
{
public:
std::string errMessage;
std::string fileName;

ConfigFileException( std::string tmpErrMessage, std::string tmpFileName )
{
	fileName = tmpFileName;
	errMessage = tmpErrMessage;
}
};

class ConfigFile
{
std::string FileName;

public:
////////////////////////////////////
ConfigFile( std::string strFile ) {
	this->FileName = strFile;

	if(!FileExists())
	{
	ConfigFileException e(FILE_NOT_EXISTING, this->FileName);

	throw e;
	}
}

ConfigFile( ) {
}

~ConfigFile( ) {
}
////////////////////////////////////


////////////////////////////////////
void SetFileName( std::string newFileName )
{
	this->FileName = newFileName;

	if(!FileExists())
	{
		ConfigFileException e(FILE_NOT_EXISTING, this->FileName);

		throw e;
	}
}

std::string GetFileName()
{
	if(this->FileName.size() < 1 )
	{
		ConfigFileException e(FILENAME_NOT_DEFINED, NO_FILE_NAME);

		throw e;    

		return false;
	}

	return this->FileName;
}

bool FileExists() //If no file specified, just check if the FileName file exists
{
	if(this->FileName.size() < 1 )
	{
		ConfigFileException e(FILENAME_NOT_DEFINED, NO_FILE_NAME);

		throw e;    

		return false;
	}

	bool retVal = false;
	std::fstream tmpFile;

	tmpFile.open(this->FileName.c_str(), std::ios::in);

	if( tmpFile.is_open() )
		retVal = true;

	tmpFile.close();

	return retVal;
}

bool FileExists( std::string fileName )
{
	bool retVal = false;
	std::fstream tmpFile;

	tmpFile.open(fileName.c_str(), std::ios::in);

	if( tmpFile.is_open() )
		retVal = true;

	tmpFile.close();

	return retVal;
}

int ReadIntValue( std::string section, std::string option )
{
	if(!FileExists())
	{
		ConfigFileException e(FILE_NOT_EXISTING, this->FileName);

		throw e; //Have fun
	}

	return GetPrivateProfileIntA(section.c_str(), option.c_str(), -1, this->FileName.c_str());
}

float ReadFloatValue( std::string section, std::string option )
{
	if(!FileExists())
	{
		ConfigFileException e(FILE_NOT_EXISTING, this->FileName);

		throw e; //Have fun
	}

	char tmpStr[16] = {'\0'};

	GetPrivateProfileStringA(section.c_str(), option.c_str(), NULL, tmpStr, 15, this->FileName.c_str());

	return (float)atof(tmpStr);
}

std::string ReadStringValue( std::string section, std::string option )
{
	if(!FileExists())
	{
		ConfigFileException e(FILE_NOT_EXISTING, this->FileName);

		throw e;
	}

	char tmpStr[256] = {'\0'};

	GetPrivateProfileStringA(section.c_str(), option.c_str(), NULL, tmpStr, 255, this->FileName.c_str());

	return std::string(tmpStr);
}

void WriteValue( std::string section, std::string option, std::string val )
{
	if(this->FileName.size() < 1 )
	{
		ConfigFileException e(FILENAME_NOT_DEFINED, NO_FILE_NAME);

		throw e;
	}

	WritePrivateProfileStringA(section.c_str(), option.c_str(), val.c_str(), this->FileName.c_str());
}

void WriteValue( std::string section, std::string option, int val )
{
	if(this->FileName.size() < 1 )
	{
		ConfigFileException e(FILENAME_NOT_DEFINED, NO_FILE_NAME);

		throw e;    
	}

	char tmpResult[10] = {'\0'};
	_itoa_s (val, tmpResult, 9, 10);
	WritePrivateProfileStringA(section.c_str(), option.c_str(), tmpResult, this->FileName.c_str());
}

void WriteValue( std::string section, std::string option, float val )
{
	if(this->FileName.size() < 1 )
	{
		ConfigFileException e(FILENAME_NOT_DEFINED, NO_FILE_NAME);

		throw e;    
	}

	char tmpResult[16] = {'\0'};
	sprintf(tmpResult, "%f", val);
	WritePrivateProfileStringA(section.c_str(), option.c_str(), tmpResult, this->FileName.c_str());
}
};

 

"Download" EasyCfg.cpp

 

 

by Lightness

  • 3 weeks later...
  • 2 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...