EVC中读取 txt 文件,并显示到CEDIT中,但是显示出乱码,应该是WINCE UNIC的问题,我该如何读取出来呢

lyzj3210   2008-12-24 11:00 楼主
EVC中读取 txt 文件,并显示到CEDIT中,但是显示出乱码,应该是WINCE UNIC的问题,我该如何读取出来呢

代码如下:

LPCTSTR p;
    if(FindFirstFile(L"1.txt",&wfd)==INVALID_HANDLE_VALUE )
        {
                MessageBox(L"FileFind");
                //return;
        }
    CFile f(L"\\1.txt",CFile::modeRead);
    DWORD dwLen=f.GetLength();
    char *pBuf=new char[dwLen+1];
    UINT nBytesRead=f.Read(pBuf,dwLen);
    pBuf[dwLen]='\0';
    f.Close();
       
    CString str=pBuf;//pbuf中的ansi字符会被自动转换成unicode。

        p = str;
        SetDlgItemText(IDC_EDIT1,str);
        MessageBox(str);

回复评论 (12)

我的TXT保存成UNICOL码了。也试过只读和不是只读的属性。仍然是乱码,等待高手解惑~
点赞  2008-12-24 11:04
这个不能直接显示读出来的
wince下的是unicode
要转换才能显示
————————————
        //pcharbuff = new char[filelen];
        pcharbuff=(char *)malloc(READSIZE);
        //ret = ReadFile(hFile, pcharbuff, filelen, &actlen, NULL);        /* 从文件中读出数据 */
        ret = ReadFile(hFile, pcharbuff, READSIZE, &actlen, NULL);        /* 从文件中分段读出数据,每次30K */
        if (ret == TRUE)
        {
                LPTSTR pStr = m_strDisp.GetBuffer(filelen);       
                // 将字节转化为 Unicode 字符串——这个函数可以帮助你                MultiByteToWideChar(CP_ACP, 0, pcharbuff, filelen, pStr, filelen);
                m_strDisp.ReleaseBuffer();
                UpdateData(FALSE);                                                                                /* 将读出的数据显示出来 */
                MessageBox(_T("读文件成功!"));       
        }
点赞  2008-12-24 11:13
gooogleman,正解!@赞一个!!!
点赞  2008-12-24 11:21
赞一个先
点赞  2008-12-24 13:20
同意楼上,MultiByteToWideChar()可以很好的解决字符的转换.
用EVC下读和写都要注意字符的转换.
点赞  2008-12-24 13:48
哇哇。。之前我也看到了这个函数,但是跟我擦肩而过,试下先!!
点赞  2008-12-24 14:20
  1. CFile f(L"\\1.txt",CFile::modeRead);

  2. DWORD dwLen=f.GetLength();
  3. char *pBuf=new char[dwLen+1];
  4. UINT nBytesRead=f.Read(pBuf,dwLen);
  5. pBuf[dwLen]='\0';
  6.    
  7. f.Close();
  8.        
  9. UINT wlen = MultiByteToWideChar(CP_ACP,0, pBuf, -1, NULL, 0);


  10. CString   aa(pBuf,wlen);

  11. MessageBox(aa);


  12. LPTSTR pwText = aa.GetBuffer(wlen);
  13.        

  14. MultiByteToWideChar (CP_ACP, 0, pBuf, wlen, pwText, dwLen);

  15.   
  16. SetDlgItemText(IDC_EDIT1,pwText);

  17. UpdateData(FALSE);
  18.        

我使用上面的代码来显示,结果还是乱码,是不是还有什么差错呢?
点赞  2008-12-24 17:51
呵呵,在这里看到Goooogleman

点赞  2008-12-25 13:51
/*******************************************************//
//****************读取文本相关操作***********************//
//入口参数:m_Readtxt,打开文件的路径信息。
//出口参数:m_strtempswap,返回值为读取的文本。
//*******************************************************//
CString CM2printDlg::Readtextinfo(CString m_Readtxt)
{        CString  m_strtempswap=_T("没有找到数据");
        CFile file;
        if(!file.Open(m_Readtxt,CFile::modeRead ))        
        {
                return m_strtempswap;//打开文件
        }
       

        int m_nFilelength=file.GetLength();
        BYTE *pfilenewmem = new BYTE[m_nFilelength];//新建内存空间
        memset(pfilenewmem,0,m_nFilelength);//初始化内存在新建空间内写入零
        file.SeekToBegin();                        //寻找读取文件的开始
        file.Read(pfilenewmem,m_nFilelength);
        file.Close();
       
        TCHAR *pSwapbuff = new TCHAR[m_nFilelength*2];
        memset(pSwapbuff,0,m_nFilelength*2);
        MultiByteToWideChar(CP_ACP,0,(char*)pfilenewmem,m_nFilelength,pSwapbuff,m_nFilelength*2);
        m_strtempswap.Empty();
        m_strtempswap.Format(_T("%s\n"),pSwapbuff);
        m_strtempswap.TrimRight();

        delete []pSwapbuff;
        pSwapbuff =NULL;
        delete []pfilenewmem;
        pfilenewmem=NULL;

        return m_strtempswap;

}

void CM2printDlg::OnOpenfile()
{
        // TODO: Add your control notification handler code here
        CString cspath;
        CFileDialog * dialog = new CFileDialog(TRUE);

        if(IDOK==dialog->DoModal())
        {
        cspath=dialog->GetPathName();
                filedata=Readtextinfo(cspath);
                m_disfiledata.SetWindowText(filedata);

        }       
}
调试通过的,直接拷贝就可以用
点赞  2008-12-25 14:11
引用: 引用 10 楼 gooogleman 的回复:
哎,我以为你解决了呢。给个源码你吧

做的很好的,是在wince下看电子书的源码。(不过不是我写的。)

http://download.eeworld.net/source/907944
自己好好看看吧。
点赞  2008-12-25 14:37
其实是搞好了,原来是w哦读的文件本来就是UNICODE,现在把读取的文件改为ASCI就可以了,谢谢GOOGLEMAN,让你失望了哈哈!!!感谢楼上各位!!

结贴路
点赞  2008-12-25 18:06
为什么看不到回复
点赞  2010-5-18 15:28
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复