file2.Open(strInfoName, CFile::modeRead);
CString infonum,infoname,infogroup;
for(int filei=0;filei<m_pList.GetItemCount();filei++)
{
CString  filenum=m_pList.GetItemText(filei,2);
file2.SeekToBegin();
while(file2.ReadString(info_strLine))
{
AfxExtractSubString(infonum,info_strLine,0,_T(','));
AfxExtractSubString(infogroup,info_strLine,1,_T(','));
AfxExtractSubString(infoname,info_strLine,2,_T(','));
if(filenum==infonum)
{

m_pList.SetItemText(filei,1,infoname);
m_pList.SetItemText(filei,4,infogroup);
m_pList.Invalidate(true) ;
break;

} }
}
file2.Close();
m_pList.SetRedraw(1);
文件中的和listctrl中的匹配后显示  可是速度太慢了 ,求提高速度的方法。

解决方案 »

  1.   

    用buffer模式,还有最好测试下,在哪里的时间比较耗时...再考虑优化.......
      

  2.   

    读文件很慢,所以尽量避免多次读文件,这个是小改的方法
    file2.Open(strInfoName, CFile::modeRead);
    CString infonum,infoname,infogroup;//file2.SeekToBegin();
    while(file2.ReadString(info_strLine))
    {
    AfxExtractSubString(infonum,info_strLine,0,_T(','));
    AfxExtractSubString(infogroup,info_strLine,1,_T(','));
    AfxExtractSubString(infoname,info_strLine,2,_T(','));

    for(int filei=0;filei<m_pList.GetItemCount();filei++)
    {
    CString filenum=m_pList.GetItemText(filei,2);
    if(filenum==infonum)
    {
    m_pList.SetItemText(filei,1,infoname);
    m_pList.SetItemText(filei,4,infogroup);
    m_pList.Invalidate(true) ;
    break;
    }
    }

    }
    file2.Close();
    m_pList.SetRedraw(1);
      

  3.   

    如果速度还是不行就把文件的速度一次性读取到buff里,再读取string去匹配
    如果速度还是不行(假设你的m_pList数据项很多),把m_pList里的数据也读取出来放到vector<string>或者map<string,int>里去,然后一个个比较
      

  4.   

    CFile _file;
    _file.Open("C:\\test.txt",CFile::modeRead); //文件长度;
    int _len = _file.GetLength();
    char* pdata = new char[_len+1]; //读文件;
    _file.Read(pdata,_len);
    pdata[_len] = 0;
    _file.Close();自己处理字符串
      

  5.   

    求具体代码 
    for(int filei=0;filei<m_pList.GetItemCount();filei++)
    {
    CString  filenum=m_pList.GetItemText(filei,2);
    //file2.SeekToBegin();
    while(file2.Read(pdata,len))
    {
    pdata[len] = 0;
    AfxExtractSubString(infonum,pdata,0,_T(','));
    AfxExtractSubString(infogroup,pdata,1,_T(','));
    AfxExtractSubString(infoname,pdata,2,_T(','));
    if(filenum==infonum)
    {

    m_pList.SetItemText(filei,1,infoname);
    m_pList.SetItemText(filei,4,infogroup);
    m_pList.Invalidate(true) ;
    break;

    } }
    }
    file2.Close();
    这样就一条数据
      

  6.   


    我把while循环和for换了顺序了,不是只注释了seek函数,你把我那个整个复制过去
      

  7.   

    file2.SeekToBegin();
    这句去掉的话,文件中有的数据就找不到了!他的指针就从上一次找到的数据进行浏览了!
      

  8.   

    http://baike.baidu.com/view/394293.htm