Hallo,
unabhängig von den mir unbekannten Absichten des Thread Owners möchte ich noch folgendes zu bedenken geben: Jede Konsolenanwendung sollte so geschrieben werden, dass Power-User nicht behindert werden. Eigentlich ist die Unterstützung der Standard I/O-Kanäle eine Entwurfsentscheidung, die aus verschiedenen Verarbeitungsszenarien folgt, z.B. eine Eingabedatei soll verändert werden und das Resultat soll als neue Datei weggeschrieben werden - die von Unix her bekannten filter tools arbeiten genau so. In diesem Fall erwarte ich die Verwendung von STDIN und STDOUT einfach. Da hier eine INI-Datei verarbeitet werden soll und Delphi die entsprechenden Klassen zur bequemen Verarbeitung solcherart strukturierter Textdateien anbietet, gilt es beides unter einen Hut zu bringen.
Delphi-Quellcode:
uses
Classes,
IniFiles,
Windows,
SysUtils;
var
stream: TStream;
strings: TStrings;
ini: TMemIniFile;
begin
ini := TMemIniFile.Create('');
strings := TStringList.Create;
if ParamCount = 0
then stream := THandleStream.Create(GetStdHandle(STD_INPUT_HANDLE))
else stream := TFileStream.Create(ParamStr(1), fmOpenRead);
strings.LoadFromStream(stream);
stream.Free;
ini.SetStrings(strings);
strings.Free;
if ini.SectionExists(SECTION) then
begin {
... roll your own dice ...
} end;
ini.Free;
end;
So wird ein im Programm festgeschriebener Dateiname vermieden, die Datei kann über piping oder redirection verarbeitet werden und auf den Inhalt kann bequem zugegriffen werden. Alternativ kann die Eingabedatei auch als Parameter übergeben werden.
Bei einem einfachen StringList.LoadFromFile('C:\BOOT.INI') wird die Einbettung in die Ablaufumgebung nicht berücksichtigt.
Freundliche Grüße