下面代码片断读取txt数据,出现乱码?CStdioFile file;
……
while(file.ReadString(str))
{
   tempArr.Add(str);
}下面这种方式,乱码问题解决了,可是如何才能读取一行呢?
 FILE *fp;
……
char ip[20];
memset(ip,0,sizeof(ip));
int rc;
while(rc=fread(ip,sizeof(char),20,fp))
{
     CString cip=ip;
     tempArr.Add(cip);
}请问大家,第一种方式的乱码问题怎么解决,而第二种方式如何一次读取一行文本,谢谢!

解决方案 »

  1.   

    1  什么乱码?是多字节字符吗?
    看看是不是初始化有问题?2  用fgets读一行文本
      

  2.   

    自己写,不要使用MFC的类,MFC很多意外情况。
    ================================================== FILE *pSourFile; //指向源文件
    CString sSourLine=""; //从源文件中取出的一行 pSourFile = fopen(sFileName,"rt");
    if(pSourFile==NULL) {
    AfxMessageBox("源文件打开失败!");
    return false;
    }
    while(!feof(pSourFile)){
    ReadLine(pSourFile, sSourLine);//读一行
    }
    }
    //读取文件的一行
    void CSetEx::ReadLine(FILE *pFile, CString &line)
    {
    line="";
    char ch;
    int pos=0;
    while(!feof(pFile)){
    //Read(&ch,1);
    ch = fgetc(pFile);
    if(ch=='\r'||ch=='\n')break;
    line+=ch;
    pos++;
    if(line.Find("", 0))
    {
    ftell(pFile);
    }
    }
    line.TrimRight('\r'); 
    line.TrimRight('\n'); 
    line.TrimRight('\r'); 
    line.TrimRight(0xff); //过滤文件结束符
    return;

    }
      

  3.   

    if( !file.Open(strPath, CFile::modeRead))
    {
    return 0;
    }         
    CStringArray strArray;
    CString strLine;
    while(file.ReadString(strLine))
    strArray.Add(strLine);
    file.Close();
      

  4.   

    ^_^,谢谢大家,我一一尝试
    乱码形如:
    °¢
    °¢Ìç
    °¢ÚÄ·î³Ð
    °¡
    °¥
    °²Åà
      

  5.   

    #pragma setlocale("chs")试一下
      

  6.   

    to changlin365(茫然) :
    已经加了
      

  7.   

    楼主短信中的意思是说你要处理Unicode字符集?我早就写好了 :)//读取Unicode的字符
    void inline ReadLineW(FILE *pFile, BSTR &bstr)
    {
    bstr = NULL;
    wchar_t wch;
    int pos=0;
    BSTR bstrTmp;
    while(!feof(pFile)){
    wch = fgetwc(pFile);
    if(wch==-1) continue;
    if(wch==_T('\r')||wch==_T('\n'))break;
    bstr+=wch;
    bstrTmp+=wch;
    pos++;
    } return;
    }
      

  8.   

    下面这样解决了乱码问题:
    while(!feof(pSourFile)){
    memset(line,0,19);
    fgets(line,20,pSourFile);
    sSourLine=line;
    if(!sSourLine.IsEmpty())

       tempArr.Add(sSourLine);
    }
    }可是:(代码用于过滤)
    for(i=beforeArr.GetSize()-1;i>=0;i--)
    { for(j=0;j<tempArr.GetSize();j++)
    {
        if((beforeArr.GetAt(i))==(tempArr.GetAt(j)))
    {
    AfxMessageBox(beforeArr.GetAt(i));//分明有很多重复,为什么找不出来,将“==”换成CompareNoCase,beforeArr中的所有的都出来了,狂郁闷
    beforeArr.RemoveAt(i);
    break;
    }
    }
    }