⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 configfile.cpp

📁 非常有用的一个关于读写配置文件的类!
💻 CPP
字号:
// ConfigFile.cpp: implementation of the CConfigFile class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DocSave.h"
#include "ConfigFile.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CConfigFile::CConfigFile()
{   
	int i;
	m_FilePath="C:\\Config.txt";
	m_BufferSize=1024*48;
	m_DataSize=0;
	m_GpsLen=0;
	m_CpLen=0;
	m_AnnLen=0;
    m_DefineLen=0;

	for(i=0;i<m_BufferSize;i++)
		m_Buffer[i]=0;

}

CConfigFile::~CConfigFile()
{

}


BOOL CConfigFile::Read()
{
	CFile configfile;
	if(!configfile.Open(m_FilePath,CFile::modeReadWrite|CFile::typeBinary))
		return FALSE;
	DWORD FileLen=configfile.GetLength();
	if(FileLen > (DWORD)m_BufferSize)
		FileLen=(DWORD)m_BufferSize;
	m_DataSize=(int)(configfile.Read(m_Buffer,FileLen));
	configfile.Close();
	DelNote();      //去掉注释
	return TRUE;

}


//DEL BOOL CConfigFile::Write(CString string)
//DEL {
//DEL 	CFile configfile;
//DEL 	if(!configfile.Open(m_FilePath,CFile::modeReadWrite|CFile::typeBinary))
//DEL 		return FALSE;
//DEL 
//DEL 	return TRUE;
//DEL 
//DEL }


void CConfigFile::DelNote()
{
	CString szt="";
	char cc,ccp=0;

	for(int i=0;i<m_DataSize;i++)
	{
		cc=m_Buffer[i];
		if(cc != '/')
		{	
			szt+=cc;
			ccp=cc;	
		}
		else                                   //cc=='/'
		{
			if(i<m_DataSize)
			{
				if(m_Buffer[i+1]=='/')           //注释开始
				{
					while((i<m_DataSize)&&(m_Buffer[i]!=0x0d))
					{
						i++;
					}
					if(m_Buffer[i]==0x0d)	
					{
						i--;
					}
					ccp=0;
				}
				else
				{
					szt+=cc;	
					ccp=cc;	
				}
			}
		}
	}
	m_DataSize=szt.GetLength();
	sprintf(m_Buffer,"%s",szt);

	int ns=szt.Find("#DEFINEGPS_BEGIN",0);
	int ne=szt.Find("#DEFINEGPS_END",0);
	if((ns==-1)||(ne==-1))	return;
	ns+=16;
	m_GpsDefine="";
	for(i=ns;i<ne;i++)	m_GpsDefine+=szt[i];
	m_GpsDefine.TrimLeft();
	m_GpsDefine.TrimRight();
	m_GpsLen=m_GpsDefine.GetLength();	
	
	ns=szt.Find("#DEFINECP_BEGIN",0);
	ne=szt.Find("#DEFINECP_END",0);
	if((ns==-1)||(ne==-1))	return;
	ns+=15;
	m_CpDefine="";
	for(i=ns;i<ne;i++)	m_CpDefine+=szt[i];
	m_CpDefine.TrimLeft();
	m_CpDefine.TrimRight();
	m_CpLen=m_CpDefine.GetLength();

	ns=szt.Find("#DEFINEANN_BEGIN",0);
	ne=szt.Find("#DEFINEANN_END",0);
	if((ns==-1)||(ne==-1))	return;
	ns+=16;
	m_AnnDefine="";
	for(i=ns;i<ne;i++)	m_AnnDefine+=szt[i];
	m_AnnDefine.TrimLeft();
	m_AnnDefine.TrimRight();
	m_AnnLen=m_AnnDefine.GetLength();

	ns=szt.Find("#DEFINEHEADING_BEGIN",0);
	ne=szt.Find("#DEFINEHEADING_END",0);
	if((ns==-1)||(ne==-1))	return;
	ns+=20;
	m_HeadingDefine="";
	for(i=ns;i<ne;i++)	m_HeadingDefine+=szt[i];
	m_HeadingDefine.TrimLeft();
	m_HeadingDefine.TrimRight();
	m_HeadingLen=m_HeadingDefine.GetLength();

	ns=szt.Find("#DEFINEPITCH_BEGIN",0);
	ne=szt.Find("#DEFINEPITCH_END",0);
	if((ns==-1)||(ne==-1))	return;
	ns+=18;
	m_PitchDefine="";
	for(i=ns;i<ne;i++)	m_PitchDefine+=szt[i];
	m_PitchDefine.TrimLeft();
	m_PitchDefine.TrimRight();
	m_PitchLen=m_PitchDefine.GetLength();

}


BOOL CConfigFile::GetGpsDefine(CString &Value)
{
	CString DefineName="GpsComm=";
	if(DefineName.IsEmpty())	return FALSE;
	int nLen=DefineName.GetLength();
	int ns=m_GpsDefine.Find("GpsComm=",0);
	if(ns==-1)	return FALSE;
	Value.Empty();
	int i=ns+nLen;
	BOOL bStartCopy=FALSE;
	char cc;

    while(i<m_GpsLen)
	{
		cc=m_GpsDefine[i];
		if((cc!=0x0D)&&(cc!=0x0A)&&(cc!='\t')&&(cc!=0x20))
		{
			if(bStartCopy==FALSE)	
				bStartCopy=TRUE;
			Value+=m_GpsDefine[i];
		}
		else
		{
			if(bStartCopy)	break;
		}	

		i++;
	}

	Value.TrimLeft();
	Value.TrimRight();
		  
	return TRUE;

}

BOOL CConfigFile::GetCpDefine(CString &Value)
{
	CString DefineName="CpComm=";
	if(DefineName.IsEmpty())	return FALSE;
	int nLen=DefineName.GetLength();
	int ns=m_CpDefine.Find("CpComm=",0);
	if(ns==-1)	return FALSE;
	Value="";
	int i=ns+nLen;
	BOOL bStartCopy=FALSE;
	char cc;

    while(i<m_CpLen)
	{
		cc=m_CpDefine[i];
		if((cc!=0x0D)&&(cc!=0x0A)&&(cc!='\t')&&(cc!=0x20))
		{
			if(bStartCopy==FALSE)	
				bStartCopy=TRUE;
			Value+=m_CpDefine[i];
		}
		else
		{
			if(bStartCopy)	break;
		}	

		i++;
	}

	Value.TrimLeft();
	Value.TrimRight();

	return TRUE;

}

BOOL CConfigFile::GetAnnDefine(CString &Value)
{
	CString DefineName="AnnComm=";
	if(DefineName.IsEmpty())	return FALSE;
	int nLen=DefineName.GetLength();
	int ns=m_AnnDefine.Find("AnnComm=",0);
	if(ns==-1)	return FALSE;
	Value="";
	int i=ns+nLen;
	BOOL bStartCopy=FALSE;
	char cc;

    while(i<m_AnnLen)
	{
		cc=m_AnnDefine[i];
		if((cc!=0x0D)&&(cc!=0x0A)&&(cc!='\t')&&(cc!=0x20))
		{
			if(bStartCopy==FALSE)	
				bStartCopy=TRUE;
			Value+=m_AnnDefine[i];
		}
		else
		{
			if(bStartCopy)	break;
		}	

		i++;
	}

	Value.TrimLeft();
	Value.TrimRight();

	return TRUE;

}



BOOL CConfigFile::WriteToFile(CString string1,CString string2)
{
	CFile configfile;
	if(!configfile.Open(m_FilePath, CFile::modeReadWrite|CFile::typeBinary))
		return FALSE;
	DWORD FileLen=configfile.GetLength();
	if(FileLen > (DWORD)m_BufferSize)
		FileLen=(DWORD)m_BufferSize;
//	configfile.SeekToBegin();
	m_DataSize=(int)(configfile.Read(m_Buffer,FileLen));


	CString str1 = "";
	for(int i=0;i<m_DataSize;i++) str1+=m_Buffer[i];
	CString str2 = "Heading="+string1;
	int ns1 = str1.Find("Heading=");
	int ne1 = str1.Find("#DEFINEHEADING_END");
	str1.Delete(ns1,ne1-ns1);
	str1.Insert(ns1,str2);

	CString str3 = "Pitch="+string2;
	int ns2 = str1.Find("Pitch=");
	int ne2 = str1.Find("#DEFINEPITCH_END");
    str1.Delete(ns2,ne2-ns2);
	str1.Insert(ns2,str3);

//	configfile.SetLength(0);
//	configfile.SeekToBegin();
	configfile.SetLength(1024*48);
	configfile.SeekToBegin();
	configfile.Write(str1,str1.GetLength());
	configfile.Close();

//	CStdioFile config("C:\\Config1.txt",CFile::modeCreate|CFile::modeReadWrite|CFile::typeBinary);
//	config.Open("C:\\Config1.txt",CFile::modeCreate|CFile::modeReadWrite|CFile::typeBinary);
//	configfile.Write(str1,str1.GetLength());
//	configfile.Close();


	return true;

}

BOOL CConfigFile::GetHeadingDefine(CString &Value)
{
	CString DefineName="Heading=";
	if(DefineName.IsEmpty())	return FALSE;
	int nLen=DefineName.GetLength();
	int ns=m_HeadingDefine.Find("Heading=",0);
	if(ns==-1)	return FALSE;
    Value="";
	int i=ns+nLen;
	BOOL bStartCopy=FALSE;
	char cc;

    while(i<m_HeadingLen)
	{
		cc=m_HeadingDefine[i];
		if((cc!=0x0D)&&(cc!=0x0A)&&(cc!='\t')&&(cc!=0x20))
		{
			if(bStartCopy==FALSE)	
				bStartCopy=TRUE;
			Value+=m_HeadingDefine[i];
		}
		else
		{
			if(bStartCopy)	break;
		}	

		i++;
	}
	
	

	Value.TrimLeft();
	Value.TrimRight();

	return TRUE;

}

BOOL CConfigFile::GetPitchDefine(CString &Value)
{
	CString DefineName="Pitch=";
	if(DefineName.IsEmpty())	return FALSE;
	int nLen=DefineName.GetLength();
	int ns=m_PitchDefine.Find("Pitch=",0);
	if(ns==-1)	return FALSE;
	Value="";
	int i=ns+nLen;
	BOOL bStartCopy=FALSE;
	char cc;

    while(i<m_PitchLen)
	{
		cc=m_PitchDefine[i];
		if((cc!=0x0D)&&(cc!=0x0A)&&(cc!='\t')&&(cc!=0x20))
		{
			if(bStartCopy==FALSE)	
				bStartCopy=TRUE;
			Value+=m_PitchDefine[i];
		}
		else
		{
			if(bStartCopy)	break;
		}	

		i++;
	}

	Value.TrimLeft();
	Value.TrimRight();

	return TRUE;

}

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -