CFile file(_T("E:\\1.txt"),CFile::modeRead);
wchar_t *pBuf;
DWORD dwFlielen;
dwFlielen=file.GetLength();
pBuf=new wchar_t[dwFlielen+1];
pBuf[dwFlielen]=0;
file.Read(pBuf,dwFlielen);
file.Close();
MessageBox(pBuf);
在Multi-Byte字符集下读写没有出错。请教高手
6 个解决方案
#1
把你那个文件另存为unicode试试
#3
检查 开头 2个 字节
UNICODE 应该是 FF FE (FF FE UTF-16 aka UCS-2, little endian )
然后 逐个字节读入 到 buffer 遇到 0D (回车)时 就是 一行 (后面 3个 是 00 0A 00)
如果 不要 回车换行 这 4个 都 应该 =0;
然后 把 这行 变为 多 字节
WideCharToMultiByte
直到文件结束
UNICODE 应该是 FF FE (FF FE UTF-16 aka UCS-2, little endian )
然后 逐个字节读入 到 buffer 遇到 0D (回车)时 就是 一行 (后面 3个 是 00 0A 00)
如果 不要 回车换行 这 4个 都 应该 =0;
然后 把 这行 变为 多 字节
WideCharToMultiByte
直到文件结束
#4
试试:
// 先个修改区域设定
char* old_locale = _strdup( setlocale(LC_CTYPE,NULL) );
setlocale( LC_CTYPE, "chs" );//设定
//此处加入你读写文件代码
setlocale( LC_CTYPE, old_locale );
free( old_locale );//还原区域设定
// 先个修改区域设定
char* old_locale = _strdup( setlocale(LC_CTYPE,NULL) );
setlocale( LC_CTYPE, "chs" );//设定
//此处加入你读写文件代码
setlocale( LC_CTYPE, old_locale );
free( old_locale );//还原区域设定
#5
因为1.txt不是UNICODE编码的,所以不要用UNICODE的函数。
TRY
{
CFile file(_T("E:\\1.txt"),CFile::modeRead);
CHAR *pBuf;
DWORD dwFlielen;
dwFlielen=file.GetLength();
pBuf=new CHAR[dwFlielen+sizeof(CHAR)];
memset(pBuf, 0, dwFlielen+sizeof(CHAR));
file.Read(pBuf,dwFlielen);
file.Close();
MessageBoxA(NULL, pBuf, 0, 0);
}CATCH(CFileException, e)
{
e->ReportError();
}END_CATCH
#6
用二进制方式打开写入文件:
CStdioFile mFile;
CFileException fileException;
if(!mFile.Open(path,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite|CFile::typeBinary))
{
AfxMessageBox(_T("文件路径找不到,打开文件失败"));
return;
}
const int UNICODE_TXT_FLG = 0xFEFF;
char d = '\t';
CString cs = _T("角度");
cs+=d;
cs+=_T("权值\r\n");
mFile.Write(&UNICODE_TXT_FLG,2);
mFile.Write(cs.GetBuffer(10),cs.GetLength()*2);
CStdioFile mFile;
CFileException fileException;
if(!mFile.Open(path,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite|CFile::typeBinary))
{
AfxMessageBox(_T("文件路径找不到,打开文件失败"));
return;
}
const int UNICODE_TXT_FLG = 0xFEFF;
char d = '\t';
CString cs = _T("角度");
cs+=d;
cs+=_T("权值\r\n");
mFile.Write(&UNICODE_TXT_FLG,2);
mFile.Write(cs.GetBuffer(10),cs.GetLength()*2);
#1
把你那个文件另存为unicode试试
#2
#3
检查 开头 2个 字节
UNICODE 应该是 FF FE (FF FE UTF-16 aka UCS-2, little endian )
然后 逐个字节读入 到 buffer 遇到 0D (回车)时 就是 一行 (后面 3个 是 00 0A 00)
如果 不要 回车换行 这 4个 都 应该 =0;
然后 把 这行 变为 多 字节
WideCharToMultiByte
直到文件结束
UNICODE 应该是 FF FE (FF FE UTF-16 aka UCS-2, little endian )
然后 逐个字节读入 到 buffer 遇到 0D (回车)时 就是 一行 (后面 3个 是 00 0A 00)
如果 不要 回车换行 这 4个 都 应该 =0;
然后 把 这行 变为 多 字节
WideCharToMultiByte
直到文件结束
#4
试试:
// 先个修改区域设定
char* old_locale = _strdup( setlocale(LC_CTYPE,NULL) );
setlocale( LC_CTYPE, "chs" );//设定
//此处加入你读写文件代码
setlocale( LC_CTYPE, old_locale );
free( old_locale );//还原区域设定
// 先个修改区域设定
char* old_locale = _strdup( setlocale(LC_CTYPE,NULL) );
setlocale( LC_CTYPE, "chs" );//设定
//此处加入你读写文件代码
setlocale( LC_CTYPE, old_locale );
free( old_locale );//还原区域设定
#5
因为1.txt不是UNICODE编码的,所以不要用UNICODE的函数。
TRY
{
CFile file(_T("E:\\1.txt"),CFile::modeRead);
CHAR *pBuf;
DWORD dwFlielen;
dwFlielen=file.GetLength();
pBuf=new CHAR[dwFlielen+sizeof(CHAR)];
memset(pBuf, 0, dwFlielen+sizeof(CHAR));
file.Read(pBuf,dwFlielen);
file.Close();
MessageBoxA(NULL, pBuf, 0, 0);
}CATCH(CFileException, e)
{
e->ReportError();
}END_CATCH
#6
用二进制方式打开写入文件:
CStdioFile mFile;
CFileException fileException;
if(!mFile.Open(path,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite|CFile::typeBinary))
{
AfxMessageBox(_T("文件路径找不到,打开文件失败"));
return;
}
const int UNICODE_TXT_FLG = 0xFEFF;
char d = '\t';
CString cs = _T("角度");
cs+=d;
cs+=_T("权值\r\n");
mFile.Write(&UNICODE_TXT_FLG,2);
mFile.Write(cs.GetBuffer(10),cs.GetLength()*2);
CStdioFile mFile;
CFileException fileException;
if(!mFile.Open(path,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite|CFile::typeBinary))
{
AfxMessageBox(_T("文件路径找不到,打开文件失败"));
return;
}
const int UNICODE_TXT_FLG = 0xFEFF;
char d = '\t';
CString cs = _T("角度");
cs+=d;
cs+=_T("权值\r\n");
mFile.Write(&UNICODE_TXT_FLG,2);
mFile.Write(cs.GetBuffer(10),cs.GetLength()*2);