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++没有发现下一个编号就出错了,这该咋整呢?
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++没有发现下一个编号就出错了,这该咋整呢?
这个没找到的话会返回第三个参数_T("")给nametemp[i].className
你可以根据 空 来判断m_combox.InsertString(i,nametemp[i].className)
至于这边的话,写个空值应该没问题吧
或者你可以再定义个变量:j,nametemp[i].className有值的时候插入
有没有别的方法可以把 Name ==XX 都读出来的方法,而不用管number?
{
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();
}