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

📄 inifile.cpp

📁 电力故障信息采集,主要是针对南自的保护装置,这个程序用在Linux操作系统下
💻 CPP
字号:
//////////////////////////////////////////////////////////////////////#include "IniFile.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif/////////////////////////////////////////////////////////////////////// Construction/Destruction/////////////////////////////////////////////////////////////////////CIniFile::CIniFile(){	m_pFirstGroup = NULL;	m_bOpened = false;}void CIniFile::Release(){	CIniFile::stuIniFileGroup *pGroup = m_pFirstGroup,*pG;	CIniFile::stuIniFileField *pField,*pF;	while(pGroup != NULL)	{		pField = pGroup->pFirstField;		while(pField != NULL)		{			pF = pField->pNext;			delete pField;			pField = pF;		}		pG = pGroup->pNext;		delete pGroup;		pGroup = pG;	}	m_pFirstGroup = NULL;}CIniFile::~CIniFile(){	Release();}void CIniFile::SetPath(YsString sPathFile){	m_sPathFile = sPathFile;}bool CIniFile::ReadIniFile(YsString sPathFile){	YsString sLine,sField,sVal;	FILE *fp;	char ch;	YsString sGroup = "";	int pos;	CIniFile::stuIniFileField *pField=NULL;	if(sPathFile.size() > 0)		SetPath(sPathFile);		fp = fopen(sPathFile.data(),"r");	if(!fp)	{	    fp = fopen(sPathFile.data(),"a+");	    if(!fp)	    {		printf("===========create ini file error! %s\n",sPathFile.data());		return false;	    }	    fclose(fp);	    fp = fopen(sPathFile.data(),"r");	    if(!fp)		return false;	}	bool bExit=false;	while(1)	{		sLine = "";		while(1)		{			if(fread(&ch,sizeof(char),1,fp) <=0)			{				bExit = true;				break;			}			if(ch == '\n')				break;			if(ch != '\r')				sLine += ch;		}		if(bExit)			break;		pos = sLine.find('=');				if(sLine.size() > 0 && sLine.at(0) == '[' && sLine.find(']') >0 )		{			sGroup = sLine.substr(1,sLine.find(']') - 1);			continue;		}		else if(pos > 0 && sLine.at(0) != '#')		{			sField = sLine.substr(0,pos);			sVal = sLine.substr(pos + 1);			if(sVal.at(sVal.size()-1) == '\r' || sVal.at(sVal.size()-1) == '\n')				sVal = sVal.substr(0,sVal.size()-1);			if(sVal.at(sVal.size()-1) == '\r' || sVal.at(sVal.size()-1) == '\n')				sVal = sVal.substr(0,sVal.size()-1);			pField = GetField(sGroup,sField);			pField->sValue = sVal;		}		else //if(sLine.GetLength() == 0 || sLine.GetAt(0) == '#')				{			if(pField == NULL)			{				pField=GetField("","");				pField->sValue=sLine;			}			else			{				CIniFile::stuIniFileField *pNew=new CIniFile::stuIniFileField;				pNew->pNext=pField->pNext;				pField->pNext=pNew;				pNew->sFieldName="";				pNew->sValue=sLine;			}		}	}	fclose(fp);	m_bOpened = true;	return true;}bool CIniFile::IsKey(YsString sGroup, YsString sField){	YsString sVal;	if(m_bOpened == false)		return false;	CIniFile::stuIniFileField *pField;	pField = GetField(sGroup,sField,false);	if(pField == NULL)		return false;	return true;}YsString CIniFile::GetValue(YsString sGroup,YsString sField){	YsString sVal;	if(m_bOpened == false)		return "";	CIniFile::stuIniFileField *pField;	pField = GetField(sGroup,sField,false);	if(pField == NULL)		return "";	sVal = pField->sValue;	return sVal;}int CIniFile::GetKeyIntValue(YsString szsector, YsString szkey, int idefault /*= 0*/){	if(!IsKey(szsector,szkey))		return idefault;	YsString val=GetValue(szsector,szkey);	if(val.size() == 0)		return idefault;	return atoi(val.data());}YsString CIniFile::GetKeyStringValue(YsString szsector, YsString szkey, YsString szdefault /*= ""*/){	if(!IsKey(szsector,szkey))		return szdefault;	return GetValue(szsector,szkey);}bool CIniFile::SetValue(YsString sGroup,YsString sField,YsString sVal){	if(m_bOpened == false)		return false;	CIniFile::stuIniFileField *pField;	pField = GetField(sGroup,sField);	if(pField == NULL)		return false;	pField->sValue = sVal;	return true;}bool CIniFile::SetKeyIntValue(YsString szsector, YsString szkey, int ivalue, bool autoSave/*=true*/){	char buf[32];	memset(buf,0,32);	sprintf(buf,"%d",ivalue);	SetValue(szsector,szkey,buf);	if(autoSave && !this->WriteFile())		return false;	return true;}bool CIniFile::SetKeyStringValue(YsString szsector, YsString szkey, YsString szvalue, bool autoSave/*=true*/){	SetValue(szsector,szkey,szvalue);	if(autoSave && !this->WriteFile())		return false;	return true;}bool CIniFile::WriteFile(){	if(m_bOpened == false)		return false;	CIniFile::stuIniFileGroup *pGroup;	CIniFile::stuIniFileField *pField;	pGroup = m_pFirstGroup;	FILE *fp;;	fp = fopen(m_sPathFile.data(),"w");	if(!fp)		return false;	YsString sLine;	while(pGroup != NULL)	{		if(pGroup->sGroupName.size() > 0)		{			sLine = "[" + pGroup->sGroupName + "]\r\n";			fwrite(sLine.data(),sizeof(char),sLine.size(),fp);		}		pField = pGroup->pFirstField;		while(pField != NULL)		{			if(pField->sFieldName.size() > 0)			{				sLine = pField->sFieldName + "=" + pField->sValue + "\r\n";				fwrite(sLine.data(),sizeof(char),sLine.size(),fp);			}			else			{				sLine = pField->sValue + "\r\n";				fwrite(sLine.data(), sizeof(char), sLine.size(), fp);			}			pField = pField->pNext;		}		pGroup = pGroup->pNext;	}	fclose(fp);	return true;}CIniFile::stuIniFileGroup * CIniFile::GetGroup(YsString sGroup,bool bCreate){	CIniFile::stuIniFileGroup *pLast = m_pFirstGroup,*p = NULL;	while(pLast != NULL)	{		if(pLast->sGroupName.compare(sGroup) == 0)			break;		p = pLast;		pLast = pLast->pNext;	}	if(pLast == NULL && bCreate)	{		pLast = new CIniFile::stuIniFileGroup;		pLast->sGroupName = sGroup;		pLast->pNext = NULL;		pLast->pFirstField = NULL;		if(p == NULL)			m_pFirstGroup = pLast;		else			p->pNext = pLast;	}	return pLast;}CIniFile::stuIniFileField * CIniFile::GetField(YsString sGroup,YsString sField,bool bCreate){	CIniFile::stuIniFileGroup *pGroup;	CIniFile::stuIniFileField *pField,*p = NULL;	pGroup = GetGroup(sGroup,bCreate);	if(pGroup == NULL)		return NULL;	pField = pGroup->pFirstField;	while(pField != NULL)	{		if(pField->sFieldName.compare(sField) == 0)			break;		p = pField;		pField = pField->pNext;	}	if(pField == NULL && bCreate)	{		pField = new CIniFile::stuIniFileField;		pField->pNext = NULL;		pField->sFieldName = sField;		pField->sValue = "";		if(p == NULL)			pGroup->pFirstField = pField;		else			p->pNext = pField;	}	return pField;}

⌨️ 快捷键说明

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