由于对CFileDialog不熟悉,原本想通过CFileDialog的方式得到一个后缀为dat的文件,然后把文件路径写到temp1.file文件中去,最后由foresee这个程序自动读取文件中包含的路径解析执行
结果采用硬编码方式设置path = “...\test.dat”,不采用CFileDialog方式,ForeSee程序就能运行,而用CFileDialog选择路径却执行不了!
所以想请教各位高手,我程序中调用CFileDialog的方法错在哪里?谢谢CString path;
CFileDialog *dlg = new CFileDialog(true, NULL, NULL, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, NULL , this);
dlg->m_ofn.lpstrFilter = "DAT File (*.dat) \0*.dat\0\0";
if(dlg->DoModal() == IDOK)
{
path = dlg->GetPathName();
if(path.IsEmpty() == 1)
{
delete dlg;
return;
}
delete dlg;
try{
CString pa="C:\\temp1.file";
CFile file(pa,CFile::modeCreate|CFile::modeWrite);
file.Write(path,path.GetLength());
file.Close();
WinExec("ForeSee.exe",SW_SHOW);
}
catch(...)
{
MessageBox("建立预览文件失败! ");
return;
}
}
结果采用硬编码方式设置path = “...\test.dat”,不采用CFileDialog方式,ForeSee程序就能运行,而用CFileDialog选择路径却执行不了!
所以想请教各位高手,我程序中调用CFileDialog的方法错在哪里?谢谢CString path;
CFileDialog *dlg = new CFileDialog(true, NULL, NULL, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, NULL , this);
dlg->m_ofn.lpstrFilter = "DAT File (*.dat) \0*.dat\0\0";
if(dlg->DoModal() == IDOK)
{
path = dlg->GetPathName();
if(path.IsEmpty() == 1)
{
delete dlg;
return;
}
delete dlg;
try{
CString pa="C:\\temp1.file";
CFile file(pa,CFile::modeCreate|CFile::modeWrite);
file.Write(path,path.GetLength());
file.Close();
WinExec("ForeSee.exe",SW_SHOW);
}
catch(...)
{
MessageBox("建立预览文件失败! ");
return;
}
}
CString path = "c:\test.dat";
try{
CString pa="C:\\temp1.file";
CFile file(pa,CFile::modeCreate|CFile::modeWrite);
file.Write(path,path.GetLength());
file.Close();
WinExec("ForeSee.exe",SW_SHOW);
}
catch(...)
{
MessageBox("建立预览文件失败! ");
return;
}
程序可以正常执行CString path;
CFileDialog *dlg = new CFileDialog(true, NULL, NULL, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, NULL , this);
dlg->m_ofn.lpstrFilter = "DAT File (*.dat) \0*.dat\0\0";
if(dlg->DoModal() == IDOK)
{
path = dlg->GetPathName();
if(path.IsEmpty() == 1)
{
delete dlg;
return;
}
delete dlg;
try{
CString pa="C:\\temp1.file";
CFile file(pa,CFile::modeCreate|CFile::modeWrite);
file.Write(path,path.GetLength());
file.Close();
WinExec("ForeSee.exe",SW_SHOW);
}
catch(...)
{
MessageBox("建立预览文件失败! ");
return;
}
}
选择c盘下的test.dat,程序ForeSee.exe就不能正常解析执行test.dat文件,temp1.file下的文件路径是对的
WinExec("ForeSee.exe",SW_SHOW);
就会找不到ForeSee.exe文件出错...
CFileDialog *dlg = new CFileDialog(true, NULL, NULL, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR , NULL , this); //加上OFN_NOCHANGEDIR 标志,CFileDialog在选中文件后不会改变当前路径
我觉得奇怪的是foresee.exe是会被执行的哦,因为foresee执行以后会把temp1.file给删除,只是不知道为啥不能正常解析dat文件
那这个temp1.file的路径是不是也被影响到了呢?
改动CFiledialog之后 还出现这现象么??
答:没有,非常奇怪的是temp1.file的路径是对的问题:改动CFiledialog之后 还出现这现象么??
答:程序可以正常运行呢,但是还是不明白为啥加了这个会正确,嘿嘿,所以还得麻烦高手们给我解释下,多谢我的程序分成两部分:
主程序:它的主要功能是获取要浏览的dat文件路径,并把文件路径存储在temp1.file中,最后调用WinExec("ForeSee.exe",SW_SHOW)去启动ForeSee.exe;ForeSee.exe:启动以后自动读取temp1.file,获得要播放的dat文件路径,解析执行现在的问题在于:
采用硬编码方式即直接写temp1.file文件,比如:c:\test.dat,ForeSee.exe是能正常执行,并播放test.dat内包含的视频文件
但采用了CFileDialog以后,选择c盘下的test.dat,temp1.file文件内容是正确的:c:\test.dat,而且ForeSee.exe也能启动,只是启动以后它不会播放test.dat内包含的视频文件
我曾经试过把这部分代码分成两部分,一个CFileDialog来选择路径,再有另外一个按钮来执行WinExec("ForeSee.exe",SW_SHOW),惊讶的发现:如果先选择路径后直接点按钮,ForeSee.exe能启动但不会播放test.dat内包含的视频文件,如果先选择路径,关闭主程序,再打开主程序,点击按钮,程序执行正常所以我想是不是使用CFileDialog不对会导致它占用甚么资源?请高手再帮忙解释下,多谢多谢
猜测吧..呵呵foresee.exe 是不是也需要知道路径(因为它的代码里直接找的就是当前路径)...那这个temp1.file的路径是不是也被影响到了呢?
答:没有,非常奇怪的是temp1.file的路径是对的能说下你怎么测试出来这个结果的,
测试出foresee.exe确实找对了temp1.file的路径,但就是不播放(因为一个奇怪的原因) ?
foresee.exe是你代码程序吗? hehe.如果你觉得真的是有问题,那我也不知道了..使用Cfiledialog好像除了影响程序目录 外 没什么值得关注的 呵呵~~
测试出foresee.exe确实找对了temp1.file的路径,但就是不播放(因为一个奇怪的原因) ?
foresee.exe是你代码程序吗? hehe.我把程序分成两段了,一段是cfiledialog,一段是winexec,然后执行完cfiledialog后我去c盘下打开temp1.file,里面的路径确实就是我需要的,而且当我把关闭一次主程序,再打开主程序,在点执行winexec的按钮,程序是能正常运行的,但前提是,必须先关闭一次主程序,郁闷,呵呵多谢,结帖,嘿嘿