gpt4 book ai didi

delphi - 在Delphi 2010中读取ShellExecute()的输出文件?

转载 作者:行者123 更新时间:2023-12-03 15:41:38 26 4
gpt4 key购买 nike

我使用 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 文件。在我的程序的每次运行中,输入文件都会发生变化,输出文件也会发生变化。

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

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

提前致谢。

最佳答案

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,您可以等待进程完成工作。

关于delphi - 在Delphi 2010中读取ShellExecute()的输出文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3141048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com