遍历一个目录,看一个目录下到底有多少个子目录.我前面先做了很多动作(winexec...),然后,调用这个遍历递归,发现,生成的目录数就会少,而且,还是不确定的.有时少这个,有时少那个.但是,如果在执行完一些动作后,加入:Sleep(2000);
然后,调用这个遍历递归, 生成的目录数就会正确.同样的,按一个button,然后,调用这个遍历递归, 生成的目录数也会正确.不知道为什么会出现这样的问题?
请各位帮忙!谢谢!
然后,调用这个遍历递归, 生成的目录数就会正确.同样的,按一个button,然后,调用这个遍历递归, 生成的目录数也会正确.不知道为什么会出现这样的问题?
请各位帮忙!谢谢!
因为之前的Code是:调用winexec("copy..", SW_HIDE)生成一些子目录. 紧接着,就调用"遍历递归"去统计子目录的个数.所以会出现子目录数少!因为"copy"有可能还没Run完. 那如何才晓得"copy"已经Run完了呢?
现在的问题点就是:
Winexec("xcopy ...", SW_HIDE)以后,如何判断后台Dos程序运行结束( 多个进程在Run。)?
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof STARTUPINFO;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
PROCESS_INFORMATION pi;
BOOL res = CreateProcess(NULL,
"xcopy ...",
NULL,
NULL,
NULL,
NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW,
NULL,
NULL,
&si,
&pi);
if (TRUE == res)
{
//等待进程执行完毕,再运行
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
现在还有一问题想请教:
怎么样才可以使运行的Dos窗口不可见!虽然你提到"si.wShowWindow = SW_HIDE;",但是我发现dos窗口依然可以看得到。不知道为什么?
Xcopy功能无效。如果:si.dwFlags = STARTF_USESHOWWINDOW;
xcopy功能正确。不知道为什么?清楚该问题后,马上就结贴!麻烦大家告知!
你查一查STARTUPINFO 数据结构,可以设置io 句柄的也.
多给我点分好吗?我的分就剩2分啦,可怜可怜我吧
HANDLE hWrite=INVALID_HANDLE_VALUE;
PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si,sizeof(STARTUPINFO));
si.hStdError = INVALID_HANDLE_VALUE;
si.hStdOutput = INVALID_HANDLE_VALUE;
si.hStdInput=INVALID_HANDLE_VALUE;
si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow=SW_HIDE;
BOOL ret = CreateProcess(NULL,
"help_helpless_girl.exe"
,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi);
如果:si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
Xcopy功能无效。如果:si.dwFlags = STARTF_USESHOWWINDOW;
xcopy功能正确。不知道为什么?清楚该问题后,马上就结贴!麻烦大家告知!
---------------------------注意到重定向问题了吗? STARTF_USESTDHANDLES就是指定这个东西的