我在对话框窗口上设置了一个edit控件,想通过读取txt文本,将文本内的内容自动读到edit中去。我试着在一个txt文本中随便打了一些英文段落,并通过下面的代码能够成功读取文件。
CFile rule;
if(rule.Open("文件路径",CFile::modeRead) == FALSE) //文件路径已经设置好了
return FALSE;
CArchive ar( &rule,CArchive::load );
ar >> m_rule; ar.Close();
rule.Close(); UpdateData(FALSE);但是当我将文本中的内容换成从其他地方拷过来的中文文字时,edit 中只显示了其中的两个字,甚至还没到一行的尾部。这究竟是为什么呢?请多多执教,小弟在此先行谢过了!!!

解决方案 »

  1.   

    读取一行
    自己写,不要使用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;

    }
      

  2.   

    或者:
    CStdioFile file;
    if(file.Open(_T(m_sAppPath+"\\text"),CFile::modeReadWrite))
        {
    CString sss;
    DWORD o=0;
    int ol=0;
    while(file.ReadString(sss))
    {
    if(find.FindFile(m_sAppPath+"\\text"))
    m_cbBkGround.AddString(sss);//sss即为一行
    }
    }
      

  3.   

    我想也许是我没有将问题说清楚,我是想从一个程序中直接将一个文本的内容读到一个EDIT控件当中,并非要将这些文本读成一行,该如何实现呢?为何我之前给出的代码不能实现呢?
      

  4.   

    我刚才试着用了一下CStdioFile 的 ReadString 的方法,但是还是不能奏效。
    读出来的文本依然只有几个字,这到底是为何呢?
      

  5.   

    还是不行,一下是三种不同方法,但得到的都是相同的效果,失败的效果,不知到底错在哪了?第一种:
          CFile rule;
    if(rule.Open("d:\\robert\\lotto\\rule_ch.txt",CFile::modeRead) == FALSE)
    return FALSE;
    CArchive ar( &rule,CArchive::load );
    ar >> m_rule;

    UpdateData(FALSE);
    ar.Close();
    rule.Close();第二种:
             CStdioFile rule;
    if( rule.Open( "d:\\robert\\lotto\\rule_ch.txt",CFile::modeRead ) )
    rule.ReadString( m_rule );
    else 
    return FALSE;
    UpdateData(FALSE); rule.Close();第三种:
             CFile rule;
    if( rule.Open( "d:\\robert\\lotto\\rule_ch.txt", CFile::modeRead) )
    rule.Read( &m_rule, 102400 );
    else
    return FALSE;
    UpdateData(FALSE);
    rule.Close();以上三种方法都只能顺利读出手动往text中加入的文本,而对于通过copy past 的文本读出来之后就有问题,这是为何呢?