怎样不通过外部文件把dos命令运行结果读进Stringlist?(50分)

  • 主题发起人 主题发起人 Town
  • 开始时间 开始时间
T

Town

Unregistered / Unconfirmed
GUEST, unregistred user!
以前运行Dos命令并把结果读入,我用的是把结果保存到文件中,如
Shellexecute(handle, 'OPEN', PChar('dir> test.txt'), nil, nil,sw_shownormal);
然后用TStringList.LoadFromFile('test.txt')读进来.
但是如果频繁存取文件,系统运行受到极大影响,硬盘狂转,好心疼的说.
请问有没有办法不通过文件而把dos命令运行结果读进来?
 
如果Dos能和Windows共享内存区,那就行。
但好像不行,遗憾的说。
 
如果你是要实现DIR命令, 用
FindFirst('*.*',faAnyFile, SearchRec);
FindNext(SearchRec);
FindClose(SearchRec);
 
town肯定不是要dir的,呵呵
我觉得好像不可能,要不用ramdisk........
 
<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=109325">
这里</a>不是有介绍吗?
 
嘿嘿,yifeng说的对,俺不只要dir,还要所有类似的Dos命令,所以要一个
通用的办法.
tqz眼明手快,发现了我问的上一个问题.不过那个问题只是回答了怎样
等待Dos运行结束,和这次问的目的是不一样的.
 
你可以这样:
1、写程序A,将所有输入写到剪贴板
2、将DOS程序输出重定向到程序A
3、程序B从剪贴板中取数据
如果需要,写信给我(e.w@263.net),可以写出具体代码给你
 
我好崇敬李颖的说...
 
Town来信要代码,公布如下:
注意:
1、程序A必须指定为控制台程序
2、程序B的使用只是举例,大家可以发挥
程序A代码如下:
//------------------------------------------------------------------
program A;
{$APPTYPE CONSOLE}
uses
Clipbrd;

var
Text,
S:String;
begin
Clipboard.AsText:='';
Text:='';
while not Eofdo
begin
Readln(S);
Text:=Text+S+#$0D+#$0A;
end;
Clipboard.AsText:=Text;
end.
//------------------------------------------------------------------
程序B代码如下:
//------------------------------------------------------------------
procedure TForm1.btTetsClick(Sender: TObject);
begin
WinExec('Command.com /C Dir|D:/Temp/Dos/A',SW_Hide);
mmResult.Lines.Text:=Clipboard.AsText;
end;
//------------------------------------------------------------------
 
接受答案了.
 
后退
顶部