IniFile.cpp 6.21 KB
#include "StdAfx.h"
#include "IniFile.h"

CIniFile::CIniFile(void)
{
}

CIniFile::CIniFile(LPCTSTR strFileName)
{
	m_strFileName=strFileName;
}

CIniFile::~CIniFile(void)
{
}

void CIniFile::SetIniFileName(LPCTSTR strFileName)
{
	m_strFileName=strFileName;
}

LPCTSTR CIniFile::GetIniFileName()
{
	return m_strFileName;
}


BOOL CIniFile::WriteString(LPCTSTR strSection, LPCTSTR strKey, LPCTSTR strValue)
{
	if(_tcslen(strSection)==0 || _tcslen(strKey)==0)
	{
		return FALSE;
	}
	return WritePrivateProfileString(strSection,strKey,strValue,m_strFileName);
}

BOOL CIniFile::WriteInt(LPCTSTR strSection, LPCTSTR strKey, int iValue)
{
	CString sss;
	sss.Format(TEXT("%d"), iValue);
	return WriteString(strSection, strKey, sss);
}

BOOL CIniFile::WriteDouble(LPCTSTR strSection, LPCTSTR strKey, double fValue)
{
	CString sss;
	sss.Format(TEXT("%.6f"), fValue);
	return WriteString(strSection, strKey, sss);
}

BOOL CIniFile::WriteFloat(LPCTSTR strSection, LPCTSTR strKey, float fValue)
{
	CString sss;
	sss.Format(TEXT("%.6f"), fValue);
	return WriteString(strSection, strKey, sss);
}

BOOL CIniFile::WriteLong(LPCTSTR strSection, LPCTSTR strKey, long n32Value)
{
	CString sss;
	sss.Format(TEXT("%ld"), n32Value);
	return WriteString(strSection, strKey, sss);

}

BOOL CIniFile::WriteDWORD(LPCTSTR strSection, LPCTSTR strKey, DWORD u32Value)
{
	CString sss;
	sss.Format(TEXT("%u"), u32Value);
	return WriteString(strSection, strKey, sss);
}

BOOL CIniFile::WriteBool(LPCTSTR strSection, LPCTSTR strKey, bool bValue)
{
	CString sss;
	sss.Format(TEXT("%d"), bValue?1:0);
	return WriteString(strSection, strKey, sss);
}

CString CIniFile::ReadString(LPCTSTR strSection, LPCTSTR strKey, CString strDefault)
{
	CString sss;
	if(_tcslen(strSection)==0 || _tcslen(strKey)==0)
	{
		return strDefault;
	}
	GetPrivateProfileString(strSection, strKey,strDefault,sss.GetBuffer(1000),1000,m_strFileName);
	sss.ReleaseBuffer();
	return sss;

}

int CIniFile::ReadInt(LPCTSTR strSection, LPCTSTR strKey, int iDefault)
{
	if(_tcslen(strSection)==0 || _tcslen(strKey)==0)
	{
		return iDefault;
	}
	return GetPrivateProfileInt(strSection,strKey,iDefault,m_strFileName);
}

double CIniFile::ReadDouble(LPCTSTR strSection, LPCTSTR strKey, double fDefualt)
{
	if(_tcslen(strSection)==0 || _tcslen(strKey)==0)
	{
		return fDefualt;
	}
	CString sss;
	sss = ReadString(strSection,strKey);
	if ("ERROR" == sss)
	{
		return fDefualt;
	}

	return atof(sss);

}

long CIniFile::ReadLong(LPCTSTR strSection, LPCTSTR strKey, long n32Defualt)
{
	if(_tcslen(strSection)==0 || _tcslen(strKey)==0)
	{
		return n32Defualt;
	}
	CString sss;
	sss = ReadString(strSection,strKey);
	if ("ERROR" == sss)
	{
		return n32Defualt;
	}
	return _tcstoul(sss,NULL,10);

}

DWORD CIniFile::ReadDWORD(LPCTSTR strSection, LPCTSTR strKey, DWORD u32Defualt)
{
	if(_tcslen(strSection)==0 || _tcslen(strKey)==0)
	{
		return u32Defualt;
	}
	CString sss;
	sss = ReadString(strSection,strKey);
	if ("ERROR" == sss)
	{
		return u32Defualt;
	}
	return _tcstoul(sss,NULL,10);
}

float CIniFile::ReadFloat(LPCTSTR strSection, LPCTSTR strKey, float fDefualt)
{
	if(_tcslen(strSection)==0 || _tcslen(strKey)==0)
	{
		return fDefualt;
	}
	CString sss;
	sss = ReadString(strSection,strKey);
	if ("ERROR" == sss)
	{
		return fDefualt;
	}
	return atof(sss);
}

//1为true,其它值为false
bool CIniFile::ReadBool(LPCTSTR strSection, LPCTSTR strKey, bool bDefualt)
{
	if(_tcslen(strSection)==0 || _tcslen(strKey)==0)
	{
		return bDefualt;
	}
	return (1 == ReadInt(strSection,strKey,bDefualt?1:0)?true:false);
	
}
//删除某个section
BOOL CIniFile::DeleteSection(LPCTSTR strSection)
{
	return WritePrivateProfileString(strSection,NULL,NULL,m_strFileName);
}

//删除某个Section下的某个Key
BOOL CIniFile::DeleteKey(LPCTSTR strSection,LPCTSTR strKey)
{
	return WritePrivateProfileString(strSection,strKey,NULL,m_strFileName);
}
// 获取所有的Section的列表
//parameters:
//CStringArray &SectionList -- 获取到的Section列表(out)
BOOL CIniFile::GetSectionList(CStringArray &SectionList)
{
	TCHAR strBuffer[1000],*pPos=NULL;
	SectionList.RemoveAll();
	DWORD datacount=GetPrivateProfileString(NULL,NULL,TEXT("NOVAL"),strBuffer,1000,m_strFileName);
	if(_tcscmp(strBuffer,TEXT("NOVAL"))==0)
	{
		return FALSE;
	}

	CString sss;
	pPos=strBuffer;
	while(*pPos != '\0')
	{
		sss=pPos;
		SectionList.Add(sss);
		pPos+=sss.GetLength()+1;
	}
	return TRUE;
}

//获取某个Section下的Key的列表
//parameters:
//LPCTSTR strSection --  Section(in)
//CStringArray &keylist -- 获取到的key 列表(out)
BOOL CIniFile::GetKeyList(LPCTSTR strSection,CStringArray &KeyList)
{
	TCHAR strBuffer[1000],*pPos=NULL;
	KeyList.RemoveAll();
	DWORD datacount=GetPrivateProfileString(strSection,NULL,TEXT("NOVAL"),strBuffer,1000,m_strFileName);
	if(_tcscmp(strBuffer,TEXT("NOVAL"))==0)
	{
		return FALSE;
	}

	CString sss;
	pPos=strBuffer;
	while(*pPos != '\0')
	{
		sss=pPos;
		KeyList.Add(sss);
		pPos+=sss.GetLength()+1;
	}

	return TRUE;
}



//写Section
//parameters:
//LPCTSTR strSection --  Section(in)
//CStringArray &keylist -- key 列表(in)
//CStringArray &valuelist -- 对应key的值(in)
BOOL CIniFile::WriteSection(LPCTSTR strSection,CStringArray &keylist,CStringArray &valuelist)
{
	if(_tcslen(strSection)==0 || keylist.GetSize()!=valuelist.GetSize()) 
	{
		return FALSE;
	}	
	if(keylist.GetSize()==0 || valuelist.GetSize()==0) 
	{
		return TRUE;
	}
		
	CString strTemp = "";
	CString sss ="";
	BOOL bFlag = FALSE;
	for(int i=0;i<keylist.GetSize();i++)
	{
		strTemp.Format(TEXT("%s=%s\r\n"),keylist[i],valuelist[i]);
		sss += strTemp;
		bFlag = WriteString(strSection,keylist[i],valuelist[i]);
		if (bFlag == FALSE)
		{
			return FALSE;
		}
	}
	return TRUE;
}

//读Section
//parameters:
//LPCTSTR strSection --  Section(in)
//CStringArray &keylist -- key 列表(out)
//CStringArray &valuelist -- 对应key的值(out)
BOOL CIniFile::ReadSection(LPCTSTR strSection,CStringArray &keylist,CStringArray &valuelist)
{
	if(_tcslen(strSection)==0)
	{
		return false;
	}

	keylist.RemoveAll();
	valuelist.RemoveAll();

	TCHAR tempbufer[65536],*ppp;
	memset(tempbufer,0,sizeof(tempbufer));
	GetPrivateProfileSection(strSection,tempbufer,65535,m_strFileName);

	ppp=tempbufer;

	CString sss;
	int pos;
	while(*ppp != '\0')
	{
		sss=ppp;
		ppp+=sss.GetLength()+1;

		pos=sss.Find('=',0);

		keylist.Add(sss.Left(pos));
		valuelist.Add(sss.Right(sss.GetLength()-pos-1));
	}
	return TRUE;
}