如何在创建文件后执行代码?

时间:2011-01-05 08:05:49

标签: visual-c++

我遇到了这个问题。我的ShellExecute工作正常,输出是PNG图像文件。问题是此过程需要一些时间(秒)才能生成文件。同时,我的result已经执行,但它会产生错误消息,因为来自ShellExecute的PNG文件尚未存在。如何确保文件先存在,然后才能执行result

    ShellExecute(0,                           
                 _T("open"),            
                 _T("c:\\convert.exe"), 
                 full,                  
                 0,                     
                 SW_HIDE);

    result  = ExecuteExternalProgramCompare(L"c.png", L"t.png");  // this line always gives error because the file c.png is not produce yet by shellexecute above.

更新: 我尝试转换为ShellexecuteEx。

SHELLEXECUTEINFO info = {0};

info.cbSize = sizeof(SHELLEXECUTEINFO);
info.fMask  = SEE_MASK_NOCLOSEPROCESS;
info.lpFile = _T("c:\\convert.exe");
info.lpParameters = full;
info.nShow = SW_HIDE;

1 个答案:

答案 0 :(得分:1)

您应该使用ShellExecuteEx。这将允许您处理被调用的进程,以便您可以等待进程结束。

SHELLEXECUTEINFO info = {0};

info.cbSize = sizeof(SHELLEXECUTEINFO);
info.fMask  = SEE_MASK_NOCLOSEPROCESS;
info.lpVerb = _T("open");
info.lpFile = _T("c:\\convert.exe");
info.lpParameters = full;
info.lpDirectory = NULL;
info.nShow = SW_HIDE;

if (ShellExecuteEx (&info))
{
   WaitForSingleObject (info.hProcess, INFINITE);
}