Я использую redmon для перенаправления postscript в delphi для обработки.Redmon & capture stdin with Delphi
Я использую следующий код для чтения стандартного ввода в файл:
var
Stdin: THandleStream;
FStream: TFileStream;
BytesRead:Int64;
Buffer: array[0..1023] of Byte;
StdIn := THandleStream.Create(GetStdHandle(STD_INPUT_HANDLE));
try
tempps:=GetTempFile('.ps');
FStream:=tfilestream.Create(tempps,fmCreate or fmOpenReadWrite);
StdIn.Seek(0,0);
try
repeat
BytesRead:=StdIn.Read(Buffer,1024);
FStream.Write(Buffer,BytesRead);
until bytesread<SizeOf(Buffer);
finally
InputSize:=FStream.Size;
FStream.Free;
end;
finally
StdIn.Free;
end;
Это работает в большинстве случаев, за исключением одного, где файл журнала Редмон показывает:
REDMON WritePort: OK count=65536 written=65536
REDMON WritePort: Process not running. Returning TRUE.
Ignoring 65536 bytes
Является ли тот факт, что это 65536 только красная селедка, и это то, что я не читаю stdin должным образом, или есть какой-то странный предел где-то я забыл?
Заранее спасибо.
Edit 1
65536 является отвлекающим маневром - RedMon печатает это сообщение каждый 64K в журнале, весь файл 688759 байт, однако выглядит как Редмон закрывает выход рано, но по-прежнему продолжает выводить все равно текст.
Время для базовой отладки. Ваш процесс вообще запущен? Если да, то сколько данных оно прочитало? Сколько он должен был читать? Редмон часто генерирует * точно * 64 КБ данных? –
Прошу вас, пожалуйста, перечислить лог-архив. –