回 帖 发 新 帖 刷新版面

主题:如何用delphi的memo控件动态的显示批处理程序??

比如现在要执行一个批处理winexec('C:\deploy.bat',sw_hide);这个批处理文件会生成一个临时的文本文件test.txt(也就是dos窗口中显示的内容),然后用
memo.lines.loadfromfile(ExtractFilePath(Application.ExeName)+'\test.txt');
读取这个文本文件,倒是能读出内容(它的效果是等待文本文件test.txt生成完,再读取内容一下就全部显示了),可这不是我想要的效果。
    [b]我想要的效果是在生成test.txt的同时,memo就逐行读取test.txt,在memo中显示的效果就像dos窗口中的内容那样一行一行跳动的显示出来。[/b]
    我试过用下面的代码(也就是生成的同时就读取)
    winexec('C:\deploy.bat',sw_hide);
    memo.lines.loadfromfile(ExtractFilePath(Application.ExeName)'\test.txt');
可是会出现异常提示(文本文件test.txt在生成过程中被另一程序使用,无法访问...)
    等它生成完了倒是可以访问读取了,可是却得不到我想要的效果了......
请教大家有什么解决办法啊,感激不禁!![em15]

回复列表 (共2个回复)

沙发

我考虑可能是时间上的原因  

winexec('C:\deploy.bat',sw_hide);

是调用执行deploy.bat 但是其还没有执行完就开始了

 memo.lines.loadfromfile(ExtractFilePath(Application.ExeName)'\test.txt');
的执行.这时虽然deploy.bat创建了test.txt却还在向其写内容,

第二个可能是  deploy.bat本身执行了打开test.txt并写入内容的操作却没有关闭文件.

板凳

谢谢支持,此问题已经解决,用dos管道技术可以模拟显示。

我来回复

您尚未登录,请登录后再回复。点此登录或注册