//向一个节中添加一个键,若没有这个节则新建一个节 int MIniFile::SetValue(const char* sectionName,const char* keyName,const char* value) { IniSection* pSection = GetSection(sectionName); if (pSection != NULL) { IniKey* pKey = GetKey(sectionName,keyName); LineInfo* pLineInfo =NULL; if (pKey != NULL) { pKey->SetValue(value); pLineInfo = FindLineInfo(pKey->m_nLineNo); } else { IniKey* pLastKey = pSection->GetLastKey(); pKey = new IniKey(pSection); pSection->AddKey(pKey); pKey->SetKeyName(keyName); pKey->SetValue(value); if (pLastKey == NULL) { //该节没有键值对 pKey->m_nLineNo = pSection->m_nLineNo + 1; } else { pKey->m_nLineNo = pLastKey->m_nLineNo+1; } pSection->m_nKeyCount++; pLineInfo = new LineInfo; pLineInfo->type = LINE_KEYPAIR; pLineInfo->nLineNo = pKey->m_nLineNo; AdjustAllLineInfo(pLineInfo); } pLineInfo->strMainData = "\t"; pLineInfo->strMainData += pKey->m_Key; pLineInfo->strMainData += "\t=\t"; pLineInfo->strMainData += pKey->m_Value; } else { //新增节和键 pSection = new IniSection; IniKey* pKey = new IniKey(pSection); LineInfo* pSectionLineInfo = new LineInfo; LineInfo* pKeyLineInfo = new LineInfo; pSection->SetSectionName(sectionName); pKey->SetKeyName(keyName); pKey->SetValue(value); pSection->AddKey(pKey); pSection->m_nLineNo = m_nLineCount; pKey->m_nLineNo = m_nLineCount + 1; pSectionLineInfo->nLineNo = pSection->m_nLineNo; pSectionLineInfo->strMainData = "["; pSectionLineInfo->strMainData += sectionName; pSectionLineInfo->strMainData += "]"; pKeyLineInfo->nLineNo = pKey->m_nLineNo; pKeyLineInfo->strMainData = "\t"; pKeyLineInfo->strMainData += pKey->m_Key; pKeyLineInfo->strMainData += "\t=\t"; pKeyLineInfo->strMainData += pKey->m_Value; AdjustAllLineInfo(pSectionLineInfo); AdjustAllLineInfo(pKeyLineInfo); AddSection(pSection); } m_bChange = true; return 0; }
void MIniFile::Adjust()// { LineInfo* pInfo = 0; for(int i = 0 ; i < m_LineInfoArray.size(); ++i) { pInfo = m_LineInfoArray[i]; if(0 == pInfo) { continue; } if (pInfo->type != LINE_SECTION) { continue; } string helpStr; helpStr = pInfo->strMainData; helpStr = Trim(helpStr); string sectionName = helpStr.substr(1,helpStr.size() - 1); sectionName = sectionName.substr(0,sectionName.size() - 1); IniSection* pSection = new IniSection; pSection->SetSectionName(sectionName.c_str()); pSection->m_nLineNo = pInfo->nLineNo; AddSection(pSection); int nIndex = i+1; if(nIndex == m_LineInfoArray.size()) { break; } for(int j = nIndex; j < m_LineInfoArray.size(); ++j) { LineInfo* pKeyLine = m_LineInfoArray[j]; if(0 == pKeyLine) { continue; } if (pKeyLine->type == LINE_SECTION) { break; } if (pKeyLine->type == LINE_OTHER) { continue; } //剩下的都是LINE_PAIR pSection->m_nKeyCount++; IniKey* pKey = new IniKey; pKey->m_nLineNo = pKeyLine->nLineNo; //MString keyName,value,help; string help = pKeyLine->strMainData; help = Trim(help); int iIndex = help.find('='); string keyName = help.substr(0,iIndex); string value = help.substr(iIndex + 1); keyName = Trim(keyName); value = Trim(value); pKey->m_Key = keyName.c_str(); pKey->m_Value = value.c_str(); pSection->AddKey(pKey); } } }