コマンドラインからこれを実行すると:
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 のようなアプリケーションからの出力をキャプチャする方法は?