file.Open("IP_ROOM.txt",CFile::modeRead);
                    CString str;//存放文本内容
  char* pBuf;//动态数组存放文件内容
  pBuf=new char[file_length+1];
  pBuf[file_length]=0;//将数组最后一位设置为结束符
  file.Read(pBuf,file_length);
  str=pBuf;
                    file.Close();
if(str.Find("\r\n",0)!=-1)//查询换行符"\r\n"的第一个字符索引,从0开始,若不存在则返回-1
{
          n=str.Find("\r\n",0);
                 //TXT文件中,字符存放格式:3#101 111.121.121.121 yes房间号,IP,yes都用空格“ ”间隔开
                            //查找房间号字符串
 f=str.Find(" ",0);
 str_room=str.Left(f);
 str=str.Delete(f,str_room.GetLength());//从str字符串删除房间号                           //查找IP号字符串
                             f=str.Find(" ",0);
 str_ip=str.Left(f);
 str=str.Delete(f,str_ip.GetLength());//从str字符串删除IP
                          
                           //查找yes
 f=str.Find("\r\n",0);
 isOpen=str.Left(f);
                          str=str.Delete(f,isOpen.GetLength());///从str字符串删除yes       //第一列要用InSertItem(),插入所添加或删除的房间号
  ((CListCtrl*)GetDlgItem(IDC_LIST_ROOM))->InsertItem(0,str_room);//0行0列   //将第1行第二列的值设置为所添加或删除房间的IP地址//0行,1列
  ((CListCtrl*)GetDlgItem(IDC_LIST_ROOM))->SetItemText(0, 1,str_ip);
  //是将第1行第三列的值设置为所添加或删除房间的isOpen//0行,2列
  ((CListCtrl*)GetDlgItem(IDC_LIST_ROOM))->SetItemText(0, 2,isOpen);   UpdateData();
}
但是结果却是只有列表0行0列有插入数据,第1列和第2列没有插入数据
         难道str.Delete()后CString的索引不变?
如果不用CString::Delet(),CString::Left()还有什么办法

解决方案 »

  1.   

    CString类的Delete函数是这样的:
    int Delete(int nIndex, int nCount)
    删除字符,删除从下标nIndex开始的nCount个字符你得数据是这样3#101 111.121.121.121 yes
    程序中:
    f=str.Find(" ",0);
    str_room=str.Left(f);
    str=str.Delete(f,str_room.GetLength());//从str字符串删除房间号
    这个地方你并没有删除房间号,你只是把IP中的前str_room.GetLength()个字符给删除了。程序中后面的几个删除也是一样的问题。
      

  2.   

    str=str.Delete(f,str_room.GetLength());//从str字符串删除房间号
    改成 str = str.Mid(f+1);
      

  3.   

                             f=str.Find(" ",0);
     str_room=str.Left(f);
     //str=str.Delete(f,str_room.GetLength());
     str=str.Delete(0,str_room.GetLength()+1);                        f=str.Find(" ",0);
     str_ip=str.Left(f);
    // str=str.Delete(f,str_ip.GetLength());
    str=str.Delete(0,str_ip.GetLength()+1);  f=str.Find("\r\n",0);
     isOpen=str.Left(f);
                           // str=str.Delete(f,isOpen.GetLength());
    str=str.Delete(0,isOpen.GetLength());
    现在是什么都不显示了。。
      

  4.   

        //TXT文件中,字符存放格式:3#101 111.121.121.121 yes房间号,IP,yes都用空格“ ”间隔开
                        
                           f=str.Find(" ",0);
     str_room=str.Left(f);
      str = str.Mid(f+1);
                            f=str.Find(" ",0);
     str_ip=str.Left(f);
      str = str.Mid(f+1);
     f=str.Find("\r\n",0);
     isOpen=str.Left(f+4);为什么这里要+4才可以显示yes
      

  5.   

    函数使用问题,你的需求是取得房间号,IP,yes然后插入列表,但是你写的代码却是分别取得删除....,知道原因了吧!
      

  6.   

    yes前面首先还有个\r\n啊,然后\r\n前有几个空格呢?
    你Find的是第一个空格,但yes并不是在这个空格之后,后面还有其它字符呢,所以光+1肯定不行啊
      

  7.   

    可是我删除之前不是有分别把房间号,IP,YES保存在各自的字符串变量吗?