Hallo,
ich möchte ein Programm entwickeln, welches binäre Daten aus der Standardausgabe mittels BlockRead lesen (und später auch mittels BlockWrite in die Standardausgabe schreiben) kann.
Mit normalen Dateien funktioniert das folgendermaßen einwandfrei:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
fin, fout: file;
buf: byte;
begin
{ TODO -oUser -cConsole Main : Hier Code einfügen }
if ParamCount <> 1 then exit;
AssignFile(fin, 'eingabedatei');
Reset(fin,1);
AssignFile(fout, ParamStr(1));
Rewrite(fout,1);
while not eof(fin) do
begin
BlockRead(fin, buf, 1);
BlockWrite(fout, buf, 1);
end;
CloseFile(fin);
CloseFile(fout);
end.
Wenn ich nun für 'eingabedatei' '' (einen Leerstring) angebe, wird laut Delphi-Hilfe zu Reset die Standardein- bzw. ausgabe (je nachdem, ob Reset oder Rewrite verwendet wird) geöffnet. Allerdings stürzt das Programm dann bei dem BlockRead ab. Ich vermute stark, dass es daran liegt, dass stdin als Textdatei geöffnet wird und man BlockRead dort nicht verwenden kann.
In C war es ganz einfach, das zu tun was ich möchte:
Code:
#include <stdio.h>
#include <file.h>
int main(int argc, char *argv[])
{
FILE *fp;
int c;
if(argc < 2) return 1;
setmode(fileno(stdin), O_BINARY);
fp = fopen(argv[1], "wb");
while((c=getchar())!=EOF)
fputc(c, fp);
fclose(fp);
return 0;
}
hier sorgt der setmode-Befehl für ein binäres Öffnen der Standardeingabe. Und wie macht man das mit Delphi?
Vielen Dank für eure Hilfe!