Ich stelle diese Frage euch, sonst werde ich hier gleich verrückt! Vermutlich ist die Lösung einfach, aber ich habe halt noch nicht so oft mit Streams gearbeitet.
Folgendes problem: So lese ich den Inhalt eines TProcess-Outputs aus:
Code: Alles auswählen
const READ_BYTES = 2048;
M := TMemoryStream.Create;
m.Clear;
BytesRead := 0;
while P.Running do
begin
// make sure we have room
M.SetSize(BytesRead + READ_BYTES);
// try reading it
n := P.Output.Read((M.Memory + BytesRead)^, READ_BYTES);
if n > 0
then begin
Inc(BytesRead, n);
write(PAnsiChar(m.Memory));
end
else begin
// no data, wait 100 ms
Sleep(100);
end;
end;
// read last part
repeat
// make sure we have room
M.SetSize(BytesRead + READ_BYTES);
// try reading it
n := P.Output.Read((M.Memory + BytesRead)^, READ_BYTES);
if n > 0
then begin
Inc(BytesRead, n);
writeLn(PAnsiChar(m.Memory));
end;
until n <= 0;
p.free;
M.Free;