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