如何等待程序操作完毕 ( 积分: 20 )

  • 主题发起人 主题发起人 sy0116
  • 开始时间 开始时间
S

sy0116

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做一个程序实现以下功能:用dos命令dir >c:/1.txt或其他DOS命令生成一个TXT文件,然后将他读取到MEMO1中,但问题是经常出现读取错误,原因是文件还未创建,请问如何才能确定DOS程序是否操作完毕?
 
我想做一个程序实现以下功能:用dos命令dir >c:/1.txt或其他DOS命令生成一个TXT文件,然后将他读取到MEMO1中,但问题是经常出现读取错误,原因是文件还未创建,请问如何才能确定DOS程序是否操作完毕?
 
1.CreateProcess建立一个进程.<br>2.WaitForSingleObject等待这个进程运行结束.
 
在cmd命令后面加一个参数
 
读取前先判断文件是否存在:<br>if FileExists(FileName) then
 
如果DOS命令要分步往这个TXT中写数据呢?文件可能已经存在,但却无法打开。<br>多线程我不熟啊,高手给个例子吧
 
简单:<br>procedure FileExecuteWait(const FileName, Params:string);<br>var<br> &nbsp;si:STARTUPINFO;<br> &nbsp;pi:PROCESS_INFORMATION;<br>begin<br> &nbsp;FillChar(si,SizeOf(STARTUPINFO),0);<br> &nbsp;si.cb:=SizeOf(STARTUPINFO);<br> &nbsp;si.dwFlags:=STARTF_USESHOWWINDOW;<br> &nbsp;si.wShowWindow:=SW_HIDE;<br> &nbsp;if not CreateProcess(nil,PChar(FileName+' '+Params),nil,nil,False,0,nil,nil,si,pi) then Exit;<br> &nbsp;while WaitForSingleObject(pi.hProcess,50) &lt;&gt; WAIT_OBJECT_0 do ;<br>end;<br><br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br> &nbsp;FileExecuteWait('cmd.exe /c dir &gt;c:/1.txt', '');<br> &nbsp;with TStringList.Create do<br> &nbsp;try<br> &nbsp; &nbsp;LoadFromFile('C:/1.txt');<br> &nbsp; &nbsp;ShowMessage(Text);<br> &nbsp;finally<br> &nbsp; &nbsp;Free;<br> &nbsp;end;<br>end;
 
死定了,没法啊,dos文件不关闭,n线程也没用。其他出路吧,不要和dos程序做交互,除非那个dos程序也是你写的,它在每次向text文件写数据后都关闭数据文件。
 
dir &gt;c:/1.txt /c在借助smokingroom老兄的注意,dos总该关闭文件吧
 
接受答案了.
 
后退
顶部