3 Stimmen

Lesen der Ausgabedatei von ShellExecute() in Delphi 2010?

Ich verwende den Befehl ShellExecute, um eine Exe-Datei auszuführen, die eine Eingabetextdatei erhält und eine Ausgabetextdatei zurückgibt. Ich habe es so geschrieben:

ShellExecute(mainFormHandle, 'open', 'Test.exe',
    'input.txt output.txt', nil, sw_shownormal);

//Read the output file...
S_List.LoadFromFile('output.txt');
Writeln(S_List[0])

Ich stelle die Datei input.txt bereit, bevor ich diesen Befehl ausführe. Bei jedem Durchlauf meines Programms ändert sich die Eingabedatei und damit auch die Ausgabedatei.

Das Problem ist folgendes: Ich kann die Änderungen in der Ausgabedatei nicht sehen! Die in die Konsole geschriebene Zeile stammt von der vorherigen Datei, nicht von der neu geänderten. Ich meine, die Datei im Explorer ist geändert, aber die Datei, die ich lese, ist immer noch die alte Datei.

Es scheint ein wenig seltsam, aber ich frage mich, ob es eine Möglichkeit gibt, die Ausgabedatei zu aktualisieren, bevor sie gelesen wird? Oder übersehe ich hier etwas?

Vielen Dank im Voraus.

11voto

bepe4711 Punkte 265

ShellExecute wartet nicht darauf, dass Ihr Programm die Arbeit beendet. Das ist der Fall:

  • Test.exe startet
  • lesen Sie in output.txt
  • Test.exe schreibt neue output.txt

Versuchen Sie so etwas:

var
  StartUpInfo : TStartUpInfo;
  ProcessInfo : TProcessInformation;
  CreationFlags : Cardinal;
begin
  FillChar(StartUpInfo, SizeOf(TStartupInfo),0);
  StartupInfo.cb := SizeOf(TStartupInfo);
  CreationFlags := Normal_Priority_Class;

  if CreateProcess(nil, 'test.exe input.txt output.txt',
               nil, nil, False, CreationFlags,
               nil, 0, StartupInfo, ProcessInfo) then
  begin
    WaitforSingleObject(ProcessInfo.HProcess, INFINITE);
    CloseHandle(ProcessInfo.HProcess);

    //Read the output file...
    S_List.LoadFromFile('output.txt');
  end;

Mit WaitForSingleObject können Sie warten, bis ein Prozess seine Arbeit beendet hat.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X