CFileFind fileFind;
if(!fileFind.FindFile(szCurDir))
return;
int i = 0;
m_combox.ResetContent();
for(i = 1;i<584;i++)
{
convert.Format(_T("number%d"),i);
GetPrivateProfileString(convert,_T("Name"),_T(""),nametemp[i].className,_MAX_PATH,szCurDir);
m_combox.InsertString(i,nametemp[i].className);
} 出现的问题是number没有584个,中间有很多编号不存在,i++没有发现下一个编号就出错了,这该咋整呢?

解决方案 »

  1.   

    GetPrivateProfileString(convert,_T("Name"),_T(""),nametemp[i].className,_MAX_PATH,szCurDir);
    这个没找到的话会返回第三个参数_T("")给nametemp[i].className
    你可以根据 空 来判断m_combox.InsertString(i,nametemp[i].className)
    至于这边的话,写个空值应该没问题吧
    或者你可以再定义个变量:j,nametemp[i].className有值的时候插入
      

  2.   

    加了判断也报错。
     
    有没有别的方法可以把 Name ==XX 都读出来的方法,而不用管number?
      

  3.   

    int CIniFile::GetAllSectionNames(map<CString,CString>& mapKey)
    {
    TCHAR chSectionNames[MAX_PATH*10]={'\0'};       //所有节名组成的字符数组 
    TCHAR *pSectionName;                             //保存找到的某个节名字符串的首地址  int i=0;               //i指向数组chSectionNames的某个位置,从0开始,顺序后移 
    int j=0;             //j用来保存下一个节名字符串的首地址相对于当前i的位置偏移量  ::GetPrivateProfileSectionNames(chSectionNames,sizeof(chSectionNames)/sizeof(TCHAR),m_szPath);    for(i=0;i<sizeof(chSectionNames)/sizeof(TCHAR);i++,j++) 

    if(chSectionNames[0]=='\0') 
    break;       //如果第一个字符就是0,则说明ini中一个节也没有  if(chSectionNames[i]=='\0') 

    pSectionName=&chSectionNames[i-j]; //找到一个0,则说明从这个字符往前,减掉j个偏移量,就是一个节名的首地址 
    j=-1;                              //找到一个节名后,j的值要还原,以统计下一个节名地址的偏移量 
                                       //赋成-1是因为节名字符串的最后一个字符0是终止符,不能作为节名的一部分 

    CString strKey;
    strKey.Format(_T("%s"),pSectionName);
    mapKey[strKey]=strKey;    //添加到map if(chSectionNames[i+1]==0) 

    break;   //当两个相邻的字符都是0时,则所有的节名都已找到,循环终止 

    }   
    }  return mapKey.size(); 
    }