7178|12

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

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

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);

最新回复

为什么看不到回复  详情 回复 发表于 2010-5-18 15:28
点赞 关注

回复
举报

83

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我的TXT保存成UNICOL码了。也试过只读和不是只读的属性。仍然是乱码,等待高手解惑~
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这个不能直接显示读出来的
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("读文件成功!"));       
        }
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
gooogleman,正解!@赞一个!!!
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
赞一个先
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

6
 
同意楼上,MultiByteToWideChar()可以很好的解决字符的转换.
用EVC下读和写都要注意字符的转换.
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
哇哇。。之前我也看到了这个函数,但是跟我擦肩而过,试下先!!
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

8
 
  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.        
复制代码

我使用上面的代码来显示,结果还是乱码,是不是还有什么差错呢?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
呵呵,在这里看到Goooogleman

 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

10
 
/*******************************************************//
//****************读取文本相关操作***********************//
//入口参数: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);

        }       
}
调试通过的,直接拷贝就可以用
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 10 楼 gooogleman 的回复:
哎,我以为你解决了呢。给个源码你吧

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

http://download.eeworld.net/source/907944
自己好好看看吧。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

12
 
其实是搞好了,原来是w哦读的文件本来就是UNICODE,现在把读取的文件改为ASCI就可以了,谢谢GOOGLEMAN,让你失望了哈哈!!!感谢楼上各位!!

结贴路
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

13
 
为什么看不到回复
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表