我要在当前运行程序所在文件夹中打开一个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);
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);
解决方案 »
- 内核对象的问题,来看看
- SCoket的Receive 必须在线程忠使用么?
- 采用“事件驱动”方式读取串口数据方面的问题(急,急,急)
- 大家好,请问我用MFC写了一个OCX控件和一个调用它的EXE,在我的机器上调用结果都正常,但是在别的机器上不正常?WHY?谢谢
- 如何在对话框初始化完毕就立即做一件事情
- 关于CListCtrl加了CHECK的问题?
- 用MFC做Activex控件,如何实现里头的Picture Control跟随控件的大小而改变?
- (分享)同步或异步调用EXE(创建子进程并重定向子进程的输入、输出)
- 数据库中的表
- 怎样在程序里disable Combo Box 和List Box 控件(VC++)?谢了。
- 如何在dos/win3.1下实现多线程??
- 有没有做过短信网关的?
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
直接打开就是了
error C2440: 'type cast' : cannot convert from 'class CString' to 'const unsigned short *'
你试一试
ZeroMemory(pathbuff,256);
GetCurrentDirectory(256,pathbuff);
strcat(pathbuff,"\\");
ShellExecute(NULL,NULL,_T("first.txt"),NULL,pathbuff,SW_SHOW); 这样也可以
GetCurrentDirectory(256,pathbuff);是可以我前面的问题是画蛇添足了,按 wiler(贼狼) 兄是指点,没有必要再加上//了谢谢 snsins、 wiler(贼狼) 二位。我马上就给分了。