📄 inifile.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 + -