Einzelnen Beitrag anzeigen

gasmann

Registriert seit: 16. Mai 2008
3 Beiträge
 
#1

Wie kann man in Delphi stdin binär öffnen?

  Alt 16. Mai 2008, 16:29
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!
  Mit Zitat antworten Zitat