C++ ini配置文件的遍历

来源:互联网 发布:nginx 域名解析 编辑:程序博客网 时间:2024/05/02 04:52
void GetWholeINI(){CString g_UnitName[20]; //节点名称CString g_UnitID[20]; //节点编号CStringArray g_Section;//全局变量;分割好的sectionint counts=0;int g_UnitNumber=0;   //全局变量:节点总数char strBuffer[48];   //临时缓冲区,用于接收字符串int saveHead=0;//获取第一个节点名DWORD nChar;GetSections(g_Section);for(int i=0;i<g_Section.GetSize();i++){while(1){//保存节点标识nChar = GetPrivateProfileString(g_Section.GetAt(i),NULL,"",strBuffer,sizeof(strBuffer),iniFullPath);g_UnitID[g_UnitNumber] = strBuffer;//保存节点名称nChar = GetPrivateProfileString(g_Section.GetAt(i),g_UnitID[g_UnitNumber],"",strBuffer,sizeof(strBuffer),iniFullPath);g_UnitName[g_UnitNumber] = strBuffer;if(nChar==0){break;}//将此节点从配置文件中删除WritePrivateProfileString(g_Section.GetAt(i),g_UnitID[g_UnitNumber],NULL,iniFullPath);//保存节点个数//读不到信息,表示已经遍历整个INI文件,则退出循环g_UnitNumber ++;counts++;}//将信息重新写入配置文件for(int j = saveHead; j < g_UnitNumber; j++){WritePrivateProfileString(g_Section.GetAt(i),g_UnitID[j],g_UnitName[j],iniFullPath);UINT pumpID = atoi(g_UnitID[j]);int len = g_UnitName[j].Find(":");gPump[pumpID].szName = g_UnitName[j].Mid(0,len);gPump[pumpID].szMN = g_UnitName[j].Mid(len+1,14);}saveHead=g_UnitNumber;counts=0;}}int GetSections(CStringArray &arrSection){int iLength=0;int   iPos=0;   //TCHAR   chSectionNames[256]={0};   //总的提出来的字符串 //TCHAR   chSection[12]={0};   //存放一个段名。 char   chSectionNames[256]={0};   //总的提出来的字符串 char   chSection[24]={0};   //存放一个段名。 DWORD nChar=GetPrivateProfileSectionNames(chSectionNames,sizeof(chSectionNames),iniFullPath);//以下循环,截断到两个连续的0 for(int i=0;i<nChar;i++) { if(chSectionNames[i]==0){arrSection.Add(chSection); if   (chSectionNames[i]==chSectionNames[i+1]){                break; }memset(chSection,0,iLength); iPos=0; iLength=0;}else{chSection[iPos++]=chSectionNames[i]; iLength++;}} return   (int)arrSection.GetSize(); }

0 0