MFC 中用ShellExecute执行文件后,无法关闭对话框,出现“没有找到 一未命名文件”

[复制链接]
查看11 | 回复1 | 2013-9-26 04:25:00 | 显示全部楼层 |阅读模式
||知道
| 分类: 在对话框中点“浏览按钮”,出现文件选择框,打开文件后,就无法关闭对话框了相关的打开文件按钮如下:void CShipinDlg::OnScan() {// TODO: Add your control notification handler code hereUpdateData(TRUE);CFileDialog fileDlg(TRUE); fileDlg.m_ofn.lpstrFilter= All Files(*.avi)\\\\0*.avi\\\\0\\\\0 fileDlg.m_ofn.lpstrDefExt= *.avi CString m_open;CString m_filename;if(IDOK==fileDlg.DoModal()) { CFile file(fileDlg.GetFileName(),CFile::modeRead); m_open=fileDlg.GetPathName();//文件名+后缀 m_filename=fileDlg.GetFileName();UpdateData(FALSE); } ShellExecute(NULL, open ,m_filename,NULL, e:\\\\\\\\ ,NULL);}关闭主对话框时出现这是怎么回事呢? 下载知道APP,提问优先解答! 方式一:扫描二维码下载
方式二:短信免费下载
分享到:
2013-09-24 21:43 提问者采纳 voidCShipinDlg::OnScan(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CFileDialogfileDlg(TRUE);fileDlg.m_ofn.lpstrFilter= AllFiles(*.avi)\\\\0*.avi\\\\0\\\\0 fileDlg.m_ofn.lpstrDefExt= *.avi //CStringm_open;CStringm_filename;if(IDOK==fileDlg.DoModal()){//CFilefile(fileDlg.GetFileName(),CFile::modeRead);//这是一个无用语句,去掉//m_open=fileDlg.GetPathName();//这个也没用,去掉m_filename=fileDlg.GetFileName();UpdateData(FALSE);}ShellExecute(NULL, open ,m_filename,NULL, e:\\\\\\\\ ,NULL);}报错可能是和CFile语句有关追问 我已经去年了,但还是报错,在网上查,说是使用了相对路径,但是我这个不涉及这上问题啊 回答 看看是不是文件名和路径的问题吧,把文件改名a.avi,然后放到e盘根目录,打开试试。另外,ShellExecute是抛出式壳执行,先双击打开文件看看有没有问题。 追问 谢谢你,都试了,还是没有解决,我的文件一开始就放E盘根目录下,而且只要我不点开avi和jpg文件,主对话框就能正常关闭,只要一打开了avi和jpg对话框就无法关闭,主对话框弹出“没有找到 一未命名文件”,这到底是怎么了,文件本身也没有问题,我单独打开过了。我还换了一套代码用ShellExecuteEx问题还是依然存在 回答 照理说,你第一个参数ShellExecute的父窗口没有指定,那么ShellExecute就和对话框程序无关,也不应该在关闭的时候报错,还是应该是其它问题。现在有空,你程序打包放百度网盘,私信给我共享链接,我看看。 追问 非常感谢,请稍等 回答 虽然没法运行,原因应该是找到了,默认路径被修改,而你所有的文件都使用了相对路径(即,没有路径) e:\\\\\\\\ 这个参数,会改变默认路径,而vc程序执行的默认路径也会同时被改变。解决办法:在程序入口OnInitDialog或者InitInstance记录工作路径(GetCurrentDirectory或者GetModuleFileName),保存到对话框成员变量中,用于拼接所有文件名字符串ShellExecute第五参数不写也是没有问题的,使用NULLFileDialog,用GetPathName代替GetFileName 追问 谢谢啊,我先试试 回答 忘了说了,FileDialog也会改变默认路径。 追问 你说的第1条我没有弄好,我在OnInitDialog中写了下面的程序,接下来有点不懂了,不过我把要打开的文件放在工程文件夹中,最后就能关闭对话框,但会出一个“read错误”char buf[1000];int i=1000;GetCurrentDirectory(1000,buf); 得到当前工作路径m_directory.Format( %s ,buf); 回答 F5调试吧,我这没法帮你调试,你自己调试到错误,选重试按钮,按照左下角的调用堆栈,就可以找到你的错误代码位置,查看变量值,找到问题。 追问 好的,非常感谢您这么耐心,我还是菜鸟,真的多谢了! 回答 客气 追问 你好,刚解决了,我把原来的 CFileDialog fileDlg(TRUE)换成了CFileDialog fileDlg(TRUE, NULL, NULL, OFN_NOCHANGEDIR); 对话框就能关闭了。刚换时也出现“不能read”的错误,后来我把没用的语句全删了,就完全好了,呵呵,谢谢你呀 回答 呵呵,不改变默认目录 提问者评价谢谢!评论|
|来自团队 |采纳率80%擅长: 其他类似问题 2009-07-022 2013-01-113 2010-06-247 2011-09-177 2012-12-25相关知识
2007-11-063 2012-06-202011-08-051 2007-11-1711 2007-11-1711 2011-03-242 2010-06-192 2010-06-092 2010-03-0322011-05-052011-09-212011-09-062007-11-1711 2011-03-2422010-12-022013-03-162013-02-172007-11-1711 2011-03-242等待您来回答 0回答 101回答 2回答 203回答 203回答 51回答1回答2回答 20 邮箱登录 手机登录
帐号 密码 验证码 看不清? 记住我的登录状态
还没有百度账号? 123 精彩知识在知道
回复

使用道具 举报

千问 | 2013-9-26 04:25:00 | 显示全部楼层
| 2013Baidu|
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行