主题:[讨论]VS2005 & VC6.0 大不同?
CFile class application ?
我最近遇到 CFile 类使用的问题? 如下:
我用同样的代码 在 VC6.0 和 V哪个S2005 中 编译 ,运行 不同的结果:
1. 用 CFile 类 往.txt 文件 中写 中文 ,在VS2005 中是乱码,在VC6.0中可以正常现实中文!不知是仕么原因? 待高手解答?
代码如下:
char sReg[20]={""};
memset(ReadyData,0,20000);
CString RegStr;
if(pFile->Open(sFileName,CFile::modeCreate | CFile::modeWrite,&e))
{
RegStr=";此文件是软件设置参数记录文件,请不要修改它 \r\n";
RegStr+=";name = parameter set record\r\n";
RegStr+=";发送接收模式\r\n";
RegStr+=DataItemStartCh;
RegStr+="Mode = Master";
RegStr+=DataItemEndCh;
RegStr+="\r\n";
for(int i=0;i<RegStr.GetLength();i++)
{
ReadyData[i]=RegStr.GetAt(i);
}
//sError=RegStr;
pFile->Write(ReadyData,(UINT)strlen(ReadyData));
//delete [] ReadyData;
}
else
{
char ss[15]={""};
sError="file create failed! System error code : ";
itoa(e.m_lOsError,ss,10);
sError+=ss;
}
pFile->Close();
delete [] ReadyData;
return TRUE;
}
2. 用CString S 对象构造 WCHAR 类型数组, 赋值给 CString D普通对象(D=S) ,再用 D.GetAt(i) 读出 字符 ,赋值给 char 类型数组 ,问题出现了 :
在 VC6.0 中 就可以正确的 赋值给char 类型数组,但是 在VS2005 中就不行? 郁闷 啊!!!!!!!!!!!!
他妈的 VS2005 和VC6.0 差别就这么大么?
代码如下:
void CMfcView::OnSetfont()
{
// TODO: Add your command handler code here
CString sD;
char sRe[30];
int i,j,m=4;
char s[5];
for(i=0,j=0;i<m;i++)
{
s[j++]=i;
//s[j++]=i;
}
if(IDOK==m_FDlg.DoModal())
{
memcpy(&m_LOGFONT,m_FDlg.m_cf.lpLogFont,sizeof(LOGFONT));
m_bAllow=TRUE;
}
CString sS(m_LOGFONT.lfFaceName);
sD=sS;
j=sD.GetLength();
//char *sRe;
//sRe=new char[j+1];
memset(sRe,0,30);
for(i=0;i<j;i++)
{
sRe[i]=sD.GetAt(i);
}
sD=sRe;
MessageBox(sD);
Invalidate();
//delete [] sRe;
}
我最近遇到 CFile 类使用的问题? 如下:
我用同样的代码 在 VC6.0 和 V哪个S2005 中 编译 ,运行 不同的结果:
1. 用 CFile 类 往.txt 文件 中写 中文 ,在VS2005 中是乱码,在VC6.0中可以正常现实中文!不知是仕么原因? 待高手解答?
代码如下:
char sReg[20]={""};
memset(ReadyData,0,20000);
CString RegStr;
if(pFile->Open(sFileName,CFile::modeCreate | CFile::modeWrite,&e))
{
RegStr=";此文件是软件设置参数记录文件,请不要修改它 \r\n";
RegStr+=";name = parameter set record\r\n";
RegStr+=";发送接收模式\r\n";
RegStr+=DataItemStartCh;
RegStr+="Mode = Master";
RegStr+=DataItemEndCh;
RegStr+="\r\n";
for(int i=0;i<RegStr.GetLength();i++)
{
ReadyData[i]=RegStr.GetAt(i);
}
//sError=RegStr;
pFile->Write(ReadyData,(UINT)strlen(ReadyData));
//delete [] ReadyData;
}
else
{
char ss[15]={""};
sError="file create failed! System error code : ";
itoa(e.m_lOsError,ss,10);
sError+=ss;
}
pFile->Close();
delete [] ReadyData;
return TRUE;
}
2. 用CString S 对象构造 WCHAR 类型数组, 赋值给 CString D普通对象(D=S) ,再用 D.GetAt(i) 读出 字符 ,赋值给 char 类型数组 ,问题出现了 :
在 VC6.0 中 就可以正确的 赋值给char 类型数组,但是 在VS2005 中就不行? 郁闷 啊!!!!!!!!!!!!
他妈的 VS2005 和VC6.0 差别就这么大么?
代码如下:
void CMfcView::OnSetfont()
{
// TODO: Add your command handler code here
CString sD;
char sRe[30];
int i,j,m=4;
char s[5];
for(i=0,j=0;i<m;i++)
{
s[j++]=i;
//s[j++]=i;
}
if(IDOK==m_FDlg.DoModal())
{
memcpy(&m_LOGFONT,m_FDlg.m_cf.lpLogFont,sizeof(LOGFONT));
m_bAllow=TRUE;
}
CString sS(m_LOGFONT.lfFaceName);
sD=sS;
j=sD.GetLength();
//char *sRe;
//sRe=new char[j+1];
memset(sRe,0,30);
for(i=0;i<j;i++)
{
sRe[i]=sD.GetAt(i);
}
sD=sRe;
MessageBox(sD);
Invalidate();
//delete [] sRe;
}