先贴我的代码:
CFileDialog fileDlg(FALSE);
fileDlg.m_ofn.lpstrTitle=L"我的文件保存对话框";
fileDlg.m_ofn.lpstrFilter=L"Text Files(*.dat)\0*.dat\0All Files(*.*)\0*.*\0\0";
fileDlg.m_ofn.lpstrDefExt=L"dat";
if(IDOK==fileDlg.DoModal())
{
           if (!isRecording)
     {
record_fp = fopen(fileDlg.GetFileName().GetBuffer(0),"wb");//错误:error C2664: “fopen”: 不能将参数 1 从“wchar_t *”//转换为“const char *” 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换  
           }请问各位高手,这个问题该如何解决呢?如果用CFile类可以搞定,可是整个程序就要改太多了。。多谢了

解决方案 »

  1.   

    record_fp = _tfopen(fileDlg.GetFileName().GetBuffer(0),"wb"); //lz的是unicode工程?
      

  2.   

    你可以先定义一个char数组 然后用这个数组名做第一个参数
      

  3.   

    int mycutfile::Copyfile(char *mudi, char *from)
    {
    FILE* dest;
    FILE* frrom;
    char ch;
    if((dest=fopen(mudi,"wb"))==NULL)
    {
    return -1;
    }
    if((frrom=fopen(from,"rb"))==NULL)
    {
    return -1;
    }
    ch=fgetc(frrom);
    while(!feof(frrom))
    {
    fputc(ch,dest);
    ch=fgetc(frrom);
    }
       fclose(frrom);
       fclose(dest);
       return 1;
    }我没开vc6这是原来写过的fopen代码。
      

  4.   

    我就是希望知道怎么在unicode下,把CString转换成const char *,诸位高手可否赐教,谢谢
      

  5.   

    你的getbuffer(0)没有错。但是做为函数参数也许就会失败。所以放在外面写。
      

  6.   

    const char *p;
    p=fileDlg.GetFileName().GetBuffer(0);
    请问是这个意思吗?
      

  7.   

    WideCharToMutiperBytes()好像是这么写的也可以像下面这么写CString str = L"ABCDEF";char  *pStr = (LPSTR)(LPCSTR)str;
      

  8.   

    USES_CONVERSION;record_fp = fopen(T2CA(fileDlg.GetFileName().GetBuffer(0)),"wb");//
      

  9.   

    多谢各位,问题解决,feng1976兄的方法我试过了,好像不可以,wangyong0921兄的方法不安全。我的方法是
    char* p = new char[128];
       wcstombs(p,fileDlg.GetFileName(),127);        record_fp = fopen(p,"wb");
    多谢各位。
      

  10.   

    unicode工程直接用_wfopen
    record_fp = _wfopen(fileDlg.GetFileName().GetBuffer(0),L"wb");
      

  11.   


    试试_tfopen吧,不论unicode或者mbcs工程。
    fopen本身就提供了unicode版本(_wfopen)和mbcs版本(fopen),和两个版本下都可用的宏(_tfopen)
      

  12.   

    参考2楼,不过"wb"要换成_T("wb"), 并且不用GetBuffer,还有GetFileName返回的只是文件名,GetPathName返回的完整路径名。似乎应该这样:record_fp = _tfopen(fileDlg.GetPathName(), _T("wb"));