当我从命令行运行它时:
7z a 1.zip J:\test.mp4
我可以看到完成了多少百分比。当我尝试使用 CreateProcess 和 CreatePipe 从 Delphi 运行它时,在文件被打包之前我什么也没得到。然后它显示了 7zip 的最终输出。
我的代码如下所示:
Stream:= THandleStream.Create(hRead);
try
if not CreateProcess(nil, PChar(Cmd), nil, nil,
True, 0, nil, nil, StartupInfo,
ProcessInformation) then
RaiseLastOSError;
repeat
if not GetExitCodeProcess(ProcessInformation.hProcess, ExitCode) then
RaiseLastOSError;
while Stream.Position < Stream.Size do
begin
Stream.Read(C, 1);
if (C = #13) then
begin
Memo1.Lines.Add(S);
S := '';
Application.ProcessMessages;
end
else if C <> #10 then
begin
S := S+C;
end;
end;
until ExitCode <> Still_Active;
finally
Stream.Free;
end;
我不想只创建一个 ZIP 存档——我知道在 Delphi 中有更好的方法来做到这一点。我想与控制台应用程序交互。许多控制台应用程序的输出可以使用我发布的代码进行处理,但是使用 7zip 会失败——这就是我在这里询问 7zip 的原因。7zip 有什么特别之处以至于它的输出无法正确捕获?如何从像 7zip 这样的应用程序中捕获输出?