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);
我的TXT保存成UNICOL码了。也试过只读和不是只读的属性。仍然是乱码,等待高手解惑~
这个不能直接显示读出来的
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("读文件成功!"));
}
同意楼上,MultiByteToWideChar()可以很好的解决字符的转换.
用EVC下读和写都要注意字符的转换.
哇哇。。之前我也看到了这个函数,但是跟我擦肩而过,试下先!!
- 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();
-
- UINT wlen = MultiByteToWideChar(CP_ACP,0, pBuf, -1, NULL, 0);
- CString aa(pBuf,wlen);
- MessageBox(aa);
- LPTSTR pwText = aa.GetBuffer(wlen);
-
- MultiByteToWideChar (CP_ACP, 0, pBuf, wlen, pwText, dwLen);
-
- SetDlgItemText(IDC_EDIT1,pwText);
- UpdateData(FALSE);
-
我使用上面的代码来显示,结果还是乱码,是不是还有什么差错呢?
/*******************************************************//
//****************读取文本相关操作***********************//
//入口参数: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);
}
}
调试通过的,直接拷贝就可以用
其实是搞好了,原来是w哦读的文件本来就是UNICODE,现在把读取的文件改为ASCI就可以了,谢谢GOOGLEMAN,让你失望了哈哈!!!感谢楼上各位!!
结贴路