在vs2008下,工程用unicode码 ,想把c:/1.txt读入编辑框,但结果是乱码,代码如下,求原因,即解决方法 CFile file(_T("C:\\1.TXT") ,CFile::modeRead); TCHAR *buf=new TCHAR [file.GetLength()]; file.Read(buf,file.GetLength() ); SetDlgItemText(IDC_EDIT1, buf);
file.Close();
file.Close();
解决方案 »
- 如何在不同物理机上传递密钥
- CScrollBar怎么改变点击方向箭头时移动的距离?
- 工作5年了,需要充电了,大家平时爱不释手的专业书都是啥?
- 请教高手,CString和char[]的转化问题?
- 关于单文档的一个疑问?
- 请问如何检测一个已经在监听的SOCKET有连接请求?
- VC读取excel文件,其中有一列的内容有的是数字,有的是字符,但字符都读不出来,而数字的后面都带个.0,不知道是什么问题
- 奇怪!大家看看!不看不知道,一看吓一跳!能解释原因吗?
- 一个操作系统启动器,如何实现,各位大哥给点思路!!
- VC 6.0突然出现一个error C2065: 'FD_WRITE' : undeclared identifier这样的错误
- 求救! 不认识我的CLSID
- 急!!请教BCGControlBar的高手们……
函数也可以,你自己选一个写就行了
改为TCHAR *buf=new TCHAR [file.GetLength()+1]; 然后memset(buf,file.GetLength()+1,0);
试试行不行。
TCHAR *buf=new TCHAR [file.GetLength()]; file.Read(buf,file.GetLength() ); char *pp;
pp=W2A(buf);
SetDlgItemText(IDC_EDIT1, pp);
UINT CodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cbMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar
);
多字节转成宽字节,因为你的工程是UNICODE
需要加入,然后才能使用W2A
SetDlgItemText(IDC_EDIT1, pp); 不行吧,第二个参数需要的是LPCTSTR阿
用了一个很笨的方法
不过很有效
你可以参考一下BOOL ReadFile(CString strPath)
{
CFile fileRead;
char bufRead[3];
char* pBufFile;
UINT nLength; //打开文件
if(!fileRead.Open(strPath, CFile::modeRead))
return false; //数据准备
m_strData = _T(""); // 清空原数据流
nLength = (UINT)fileRead.GetLength(); // 文件长度
//读取文件
pBufFile = new char[nLength];
fileRead.Read(pBufFile, nLength);
//读取文件
for(int i=0; i<nLength; i++)
{
bufRead[0] = pBufFile[i];
if(BYTE(bufRead[0])>0x7F)
{
bufRead[1] = pBufFile[++i];
bufRead[2] = '\0';
}else
{
bufRead[1] = '\0';
}
m_strData += bufRead;
}
delete pBufFile;
//关闭文件
fileRead.Close(); return true;
}
int nChars;
CFile file(_T("C:\\1.TXT") ,CFile::modeRead);
char *buf=new char [file.GetLength()];
file.Read(buf,file.GetLength());
nChars=MultiByteToWideChar(CP_ACP,0,buf,-1,NULL,0); //获取宽字节所需的缓冲区长度。 TCHAR *buff=new TCHAR [nChars];
MultiByteToWideChar(CP_ACP,0,buf,-1,buff,nChars); SetDlgItemText(IDC_EDIT1, buff); file.Close();