以下是打开按钮的代码
CFileDialog *txt;    //定义一个CfileDialog对象 CStdioFile file;
CString PathName;
int length,row;
CString result;
//生成一个对话框
txt = new CFileDialog(TRUE,_T(""),_T(""),OFN_FILEMUSTEXIST |OFN_HIDEREADONLY , _T("文件类型(*.txt)|*.txt|所有文件(*.*)|*.*|"));

if(txt->DoModal()==IDOK)
{
PathName=txt->GetPathName();
}
CString strLine,strTemp;
row = 0;
while(file.ReadString(strLine))
{
char *str = strLine.GetBufferSetLength(strLine.GetLength());
char *p; if(strLine!="")
{
for (p=strtok(str,";");p!=NULL;p=strtok(NULL,";"))
{
strTemp = p;
result+=strTemp;
}
row ++;
}
}
delete txt;//释放分配的对话框
m_strText = result;
    UpdateData(false);运行时候报错:char *str = strLine.GetBufferSetLength(strLine.GetLength());这句代码无法转换“初始化”: 无法从“wchar_t *”转换为“char *”与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换

解决方案 »

  1.   

    lz是UNICODE环境
    把char *str = strLine.GetBufferSetLength(strLine.GetLength());这句代码无法转换
    改为
    wchar_t *str = strLine.GetBufferSetLength(strLine.GetLength());这句代码无法转换char *p;也改为wchar_t *p;strtok改为wcstok
      

  2.   

    注意UNICODE和assic字符集的不同就是
      

  3.   

    _T("文件类型(*.txt)|*.txt|所有文件(*.*)|*.*|")这个字符串有点问题,应该在结尾再加上一个'|':
    _T("文件类型(*.txt)|*.txt|所有文件(*.*)|*.*||")
      

  4.   

    各位大人 代码改成下面的 还是不行啊 打开文本后 显示不换行 而且出乱码了 ... CFileDialog *txt;    //定义一个CfileDialog对象 CStdioFile file;
    CString PathName;
    int row;
    CString result;
    //生成一个对话框
    txt = new CFileDialog(TRUE,_T(""),_T(""),OFN_FILEMUSTEXIST |OFN_HIDEREADONLY , _T("文件类型(*.txt)|*.txt|所有文件(*.*)|*.*|"));

    if(txt->DoModal()==IDOK)
    {
    PathName=txt->GetPathName();
    SetWindowText(PathName);
    }
    if(PathName == "")  return; if(!file.Open(PathName,CFile::modeRead))
    {
    MessageBox(_T("can not open file!"));
    return;
    }
    CString strLine,strTemp;
    row = 0;
    while(file.ReadString(strLine))
    {
    wchar_t *str = strLine.GetBufferSetLength(strLine.GetLength());
    wchar_t *p; if(strLine!="")
    {
    for (p=wcstok(str,_T(";"));p!=NULL;p=wcstok(NULL,_T(";")))
    {
    strTemp = p;
    result+=strTemp;
    }
    row ++;
    }
    }
    delete txt;//释放分配的对话框
    m_strText = result;
        UpdateData(false);
      

  5.   

    UNICODE的原因,在工程属性里将定符集改为多字节吧