回 帖 发 新 帖 刷新版面

主题:[讨论]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;
}

回复列表 (共2个回复)

沙发

看看是不是宽字符的问题。
VC6默认是ANSI,VC2005默认是WideChar。
在2005中,打开工程设置,找到Character Set一项,修改为Use Multi-Byte Character Set,即可。

板凳

谢谢 楼上的指点!我试试看!

我来回复

您尚未登录,请登录后再回复。点此登录或注册