// IniFile.h: interface for the CIniFile class. // Written by: Gao Tong // Email: [email protected] // You may use this class/code as you wish in your programs. Feel free to distribute it, and // email suggested changes to me. //////////////////////////////////////////////////////////////////////#if !defined(AFX_INIFILE_H__D6BE0D97_13A8_11D4_A5D2_002078B03530__INCLUDED_) #define AFX_INIFILE_H__D6BE0D97_13A8_11D4_A5D2_002078B03530__INCLUDED_#if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000#include <afxtempl.h> #include <iostream.h> class CIniFile { //all private variables private:private: //stores path of ini file to read/write CString FilePath; //stores name of ini file to read/write CString FileName; //get value(CString) from str CString GetValueString(CString str); //find Section in ini file BOOL FindSection(CString Section); //ini file CStdioFile IniFile; //public variables public: //public functions public:
//read value of int from ini file BOOL GetItemInt(CString Section,CString Item,int & Value);
//read value of CString from ini file BOOL GetItemString(CString Section,CString Item,CString & Value);
//write any string to ini file,"\n" BOOL WriteString(CString str);
//write Section to ini file BOOL WriteSection(CString Section);
//write Item and value of int to ini file BOOL WriteItemInt(CString Item,int Value);
//write Item and value of CString to ini file BOOL WriteItemString(CString Item,CString Value);
//open ini file for read BOOL OpenIniFileForRead(void);
//open ini file for write BOOL OpenIniFileForWrite(void);
//default constructor CIniFile();
//sets name of ini file to read and write from void SetName(CString Name);
//sets path of ini file to read and write from void SetPath(CString Path);
// Written by: Gao Tong
// Email: [email protected]
// You may use this class/code as you wish in your programs. Feel free to distribute it, and
// email suggested changes to me.
//////////////////////////////////////////////////////////////////////#if !defined(AFX_INIFILE_H__D6BE0D97_13A8_11D4_A5D2_002078B03530__INCLUDED_)
#define AFX_INIFILE_H__D6BE0D97_13A8_11D4_A5D2_002078B03530__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000#include <afxtempl.h>
#include <iostream.h>
class CIniFile
{
//all private variables
private:private: //stores path of ini file to read/write
CString FilePath; //stores name of ini file to read/write
CString FileName; //get value(CString) from str
CString GetValueString(CString str); //find Section in ini file
BOOL FindSection(CString Section); //ini file
CStdioFile IniFile; //public variables
public: //public functions
public:
//read value of int from ini file
BOOL GetItemInt(CString Section,CString Item,int & Value);
//read value of CString from ini file
BOOL GetItemString(CString Section,CString Item,CString & Value);
//write any string to ini file,"\n"
BOOL WriteString(CString str);
//write Section to ini file
BOOL WriteSection(CString Section);
//write Item and value of int to ini file
BOOL WriteItemInt(CString Item,int Value);
//write Item and value of CString to ini file
BOOL WriteItemString(CString Item,CString Value);
//open ini file for read
BOOL OpenIniFileForRead(void);
//open ini file for write
BOOL OpenIniFileForWrite(void);
//default constructor
CIniFile();
//sets name of ini file to read and write from
void SetName(CString Name);
//sets path of ini file to read and write from
void SetPath(CString Path);
//close ini file
virtual void CloseIniFile(void);
//default destructor
virtual ~CIniFile();};#endif // !defined(AFX_INIFILE_H__D6BE0D97_13A8_11D4_A5D2_002078B03530__INCLUDED_)
//////////////////////////////////////////////////////////////////////#include "stdafx.h"
#include "IniFile.h"
#include "fstream.h"#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif/////////////////////////////////////////////////////////////////////
// Construction/Destruction
///////////////////////////////////////////////////////////////////////default constructor
CIniFile::CIniFile()
{
}//default destructor
CIniFile::~CIniFile()
{}/////////////////////////////////////////////////////////////////////
// Public Functions
///////////////////////////////////////////////////////////////////////sets path of ini file to read and write from
void CIniFile::SetPath(CString Path)
{
FilePath = Path;
}//open ini file for read
BOOL CIniFile::OpenIniFileForRead()
{
BOOL bExist=IniFile.Open(FilePath+FileName,CFile::modeRead);
return bExist;
}//open ini file for write
BOOL CIniFile::OpenIniFileForWrite()
{
BOOL bExist=IniFile.Open(FilePath+FileName,CFile::modeCreate | CFile::modeWrite);
return bExist;
}void CIniFile::CloseIniFile()
{
IniFile.Close();
}//find Section in ini file
BOOL CIniFile::FindSection(CString Section)
{
IniFile.SeekToBegin();
CString str;
BOOL bFind=FALSE;
BOOL bEnd=IniFile.ReadString(str);
while(!bFind && bEnd)
{
if(str.Find(Section)>=0)
{
bFind=TRUE;
break;
}
bEnd=IniFile.ReadString(str);
}
return bFind;
}//write Section to ini file
BOOL CIniFile::WriteSection(CString Section)
{
CFileStatus status;
if(IniFile.GetStatus(status))
{
IniFile.WriteString("["+Section+"]\n");
return TRUE;
}
else
return FALSE;
}//write Item and value of int to ini file
BOOL CIniFile::WriteItemInt(CString Item, int Value)
{
CFileStatus status;
if(IniFile.GetStatus(status))
{
CString str;
str.Format("%d",Value);
str=Item+"="+str+"\n";
IniFile.WriteString(str);
return TRUE;
}
else
return FALSE;
}//write Item and value of CString to ini file
BOOL CIniFile::WriteItemString(CString Item, CString Value)
{
CFileStatus status;
if(IniFile.GetStatus(status))
{
IniFile.WriteString(Item+"="+Value+"\n");
return TRUE;
}
else
return FALSE;
}//read value of int from ini file
BOOL CIniFile::GetItemInt(CString Section, CString Item, int &Value)
{
CFileStatus status;
if(IniFile.GetStatus(status))
{
if(FindSection(Section))
{
CString buf,sub;
BOOL bFind=FALSE;
BOOL bEnd=IniFile.ReadString(buf);
while(!bFind && bEnd)
{
sub=buf.Left(buf.Find("="));
if(buf.Find("[")<0 && !sub.IsEmpty() && sub.Find(Item)>=0)
{
sub=buf.Right(buf.GetLength()-buf.Find("=")-1);
sub=GetValueString(sub);
Value=atoi(sub);
bFind=TRUE;
break;
}
bEnd=IniFile.ReadString(buf);
}
return bFind;
}
else
return FALSE;
}
else
return FALSE;
}//read value of CString from ini file
BOOL CIniFile::GetItemString(CString Section, CString Item, CString &Value)
{
CFileStatus status;
if(IniFile.GetStatus(status))
{
if(FindSection(Section))
{
CString buf,sub;
BOOL bFind=FALSE;
BOOL bEnd=IniFile.ReadString(buf);
while(!bFind && bEnd)
{
sub=buf.Left(buf.Find("="));
if(buf.Find("[")<0 && !sub.IsEmpty() && sub.Find(Item)>=0)
{
sub=buf.Right(buf.GetLength()-buf.Find("=")-1);
Value=GetValueString(sub);
bFind=TRUE;
break;
}
bEnd=IniFile.ReadString(buf);
}
return bFind;
}
else
return FALSE;
}
else
return FALSE;
}//get value(CString) from str
CString CIniFile::GetValueString(CString str)
{
int length=str.GetLength();
BOOL bSpace=TRUE;
while(length && bSpace)
{
if(str[0]==' ')
str=str.Right(--length);
else
bSpace=FALSE;
}
bSpace=TRUE;
while(length && bSpace)
{
if(str[length-1]==' ')
str=str.Left(--length);
else
bSpace=FALSE;
}
return str;
}//write any string to ini file,"\n"
BOOL CIniFile::WriteString(CString str)
{
CFileStatus status;
if(IniFile.GetStatus(status))
{
IniFile.WriteString(str);
return TRUE;
}
else
return FALSE;
}//sets name of ini file to read and write from
void CIniFile::SetName(CString Name)
{
FileName=Name+".ini";
}