我要在当前运行程序所在文件夹中打开一个temp.txt文本文件,下面两种方式,一种是成功的,另一种却打不开,请您指点:char szPath[MAX_PATH];
GetModuleFileName(NULL,szPath, MAX_PATH);  //得到当前可执行程序路径
CString lpPath;
lpPath.Format("%s",szPath);
AfxMessageBox(lpPath);  
   //此时lpPath="F:\TEMP\SHELLEXECUTE\SHELLEXECUTE\DEBUG\SHELLEXECUTE.EXE"
lpPath.Replace("\\","\\\\");   
   //lpPath="F:\\TEMP\\SHELLEXECUTE\\SHELLEXECUTE\\DEBUG\\SHELLEXECUTE.EXE"
AfxMessageBox(lpPath);
lpPath.Replace("SHELLEXECUTE.EXE","");  //去掉可执行文件名
AfxMessageBox(lpPath);  
     //此时lpPath="F:\\TEMP\\SHELLEXECUTE\\SHELLEXECUTE\\DEBUG\\"
//ShellExecute(NULL,NULL,_T("temp.txt"),NULL,(LPCSTR)lpPath,SW_SHOW);    //这条语句没有打开temp.txt
ShellExecute(NULL,NULL,_T("temp.txt"),NULL,_T("F:\\TEMP\\SHELLEXECUTE\\SHELLEXECUTE\\DEBUG\\"),SW_SHOW); 
         //这条语句可以成功打开temp.txt
ShellExecute(NULL, NULL, "iexplore",  "http://www.csdn.net" ,NULL, SW_SHOW);

解决方案 »

  1.   

    肯定是unicode转换的时候出了问题ShellExecute(NULL,NULL,_T("temp.txt"),NULL,(LPCWSTR)lpPath,SW_SHOW); 把LPCSTR改成LPCWSTR试一试
      

  2.   

    ShellExecute(NULL,NULL,_T("temp.txt"),NULLlpPath,SW_SHOW); 不要转换直接就这样可以打开的啊
      

  3.   

    lpPath.Format("%s",szPath);
    AfxMessageBox(lpPath);  
       //此时lpPath="F:\TEMP\SHELLEXECUTE\SHELLEXECUTE\DEBUG\SHELLEXECUTE.EXE"
    //到这里,只要把SHELLEXECUTE.EXE去掉就可以了
    ...
    ShellExecute(NULL,NULL,_T("temp.txt"),NULL,(LPCSTR)lpPath,SW_SHOW);    //这条语句没有打开temp.txt
      

  4.   

    ShellExecute(NULL,NULL,_T("temp.txt"),NULL,lpPath,SW_SHOW); 为什么要用LPCSTR来转换?
    直接打开就是了
      

  5.   

    把LPCSTR改成LPCWSTR后,出现如下信息:
    error C2440: 'type cast' : cannot convert from 'class CString' to 'const unsigned short *'
      

  6.   

    CString lpPath="c:\\";ShellExecute(NULL,NULL,_T("temp.txt"),NULL,lpPath,SW_SHOW); temp.txt就在C盘下面怎么会打不开?
    你试一试
      

  7.   

    char pathbuff[256];
    ZeroMemory(pathbuff,256);
    GetCurrentDirectory(256,pathbuff);
    strcat(pathbuff,"\\");
        ShellExecute(NULL,NULL,_T("first.txt"),NULL,pathbuff,SW_SHOW); 这样也可以
      

  8.   

    直接给lpPath赋值是可以打开,看来问题出在前面字符串的处理了
      

  9.   

    to  snsins:
    GetCurrentDirectory(256,pathbuff);是可以我前面的问题是画蛇添足了,按 wiler(贼狼) 兄是指点,没有必要再加上//了谢谢 snsins、 wiler(贼狼) 二位。我马上就给分了。