3

我使用 ShellExecute 命令运行一个 exe 文件,该文件获取一个输入文本文件并返回一个输出文本文件。我是这样写的:

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])

我在运行此命令之前提供了 input.txt 文件。在我的程序的每次运行中,输入文件都会更改,输出文件也会更改。

问题是这样的:我看不到输出文件的变化!控制台中写入的行来自上一个文件,而不是新更改的文件。我的意思是,资源管理器中的文件已更改,但我读取的文件仍然是旧文件。

看起来有点奇怪,但我想知道有没有办法在读取输出文件之前刷新它?或者我在这里遗漏了什么?

提前致谢。

4

1 回答 1

11

ShellExecute不等待您的程序完成工作。这就是发生的事情:

  • Test.exe 启动
  • 你在 output.txt 中读到
  • Test.exe 写入新的 output.txt

尝试这样的事情:

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;

WaitForSingleObject你可以等到一个进程完成工作。

于 2010-06-29T13:49:18.340 回答