gpt4 book ai didi

delphi - 如何使用 7z 和 Delphi 打包文件并显示完成百分比?

转载 作者:行者123 更新时间:2023-12-03 18:32:57 26 4
gpt4 key购买 nike

当我从命令行运行它时:

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 的应用程序中捕获输出?

最佳答案

可以看看progdigy做的插件

进度条

 function ProgressCallback(sender: Pointer; total: boolean; value: int64): HRESULT; stdcall;
begin
if total then
Mainform.ProgressBar.Max := value else
Mainform.ProgressBar.Position := value;
Result := S_OK;
end;

procedure TMainForm.ExtractClick(Sender: TObject);
begin
with CreateInArchive(CLSID_CFormatZip) do
begin
OpenFile('c:\test.zip');
SetProgressCallback(nil, ProgressCallback);
...
end;
end;

关于delphi - 如何使用 7z 和 Delphi 打包文件并显示完成百分比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10660933/

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