Einzelnen Beitrag anzeigen

Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#14

Re: Textdatei zur Anzeige bringen

  Alt 2. Mai 2004, 08:54
Hier ist es für die Ausgabepipe, für die Fehlerpipe machst du das gleiche:
Delphi-Quellcode:
Stream := TMemoryStream.Create;
try
  while true do begin
    succeed := ReadFile(PipeOutputRead, Buffer, 255, NumberOfBytesRead, nil);
    if not succeed then
      break;
    Stream.Write(Buffer, NumberOfBytesRead);
  end;
  Stream.Position := 0; //Diese Zeile
  Output.LoadFromStream(Stream); //und diese Zeile
finally
  Stream.Free;
end;
CloseHandle(PipeOutputRead);
Der Code liest alle Daten heraus, und sobald die Eingabe abgebrochen wird, wir alles der Stringlist hinzugefügt. Wir ändern die Reihenfolge ein wenig: die beiden Zeilen, die mit einem Kommentar versehen sind, werden in die Schleife geschoben, das heißt der Code müsste so aussehen:
Delphi-Quellcode:
Stream := TMemoryStream.Create;
try
  while true do begin
    succeed := ReadFile(PipeOutputRead, Buffer, 255, NumberOfBytesRead, nil);
    if not succeed then
      break;
    Stream.Write(Buffer, NumberOfBytesRead);
    Stream.Position := 0; //Diese Zeile
    Output.LoadFromStream(Stream); //und diese Zeile
  end;
finally
  Stream.Free;
end;
CloseHandle(PipeOutputRead);
Dadurch werden die Daten vom Stream immer in die StringList geladen, und nicht erst sobald das cmd-Programm fertig ist. Der Algo ist sicher noch optimierungsfähig (nicht immer alles laden sondern nur zusätzliche Daten), aber es ist ein Ansatz.
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat