关于文件压缩和解压的问题(100分)

  • 主题发起人 主题发起人 pzj
  • 开始时间 开始时间
P

pzj

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序中调用了一个批处理(用于压缩和解压用的几条批处理命令行的集合)
那么我在程序中如何去控制此批处理的运行情况呢,例如:我如何获得批处理已
经解压完成,我尝试过判断解压出来的文件是否已经存在来判断,但不过严密,
有否获得winzip或者其他解压程序的运行标记来判别批处理是否完成呢?200分
奉送。
 
考虑一下VCLZIP控件
 
Delphi自带的Zlib单元可以帮你的忙!
 
你的原意更象是如何等待一个DOS命令结束。
查一查以往的帖子,用CREATEPROCESS。
如果有兴趣的话,可以尝试用SHELLEXECUTEex(注意不是SHELLEXECUTE),这个函数
也能实现,而且功能比CREATEPROCESS强。
 
楼上,有类似这个意思,但这里更重要的是要达到
能判别文件是否已经完全解压,还有什么更好的招
吗?
 
我知道一个组件,我觉得还是比较好用的,
http://www.geocities.com/SiliconValley/Orchard/8607/
http://members.tripod.lycos.nl/Vleghert/
如果你不能连接该网站,我可以E_Mail给你

 
用这个函数:WinExecAndWait,等待程序执行完毕才返回:
Path是要执行的文件名,Visibility表示是否可见,值见Win32API:ShowWindow的第二个参数。
function WinExecAndWait(Path: string; Visibility: word): DWord;
var
P: integer;
Params: string;
begin
P := Pos(' ', Path); // assume params start at first space
Params := Copy(Path, P, Length(Path));
Delete(Path, P, Length(Path));
Result := CreateProcessAndWait(Path, Params, Visibility);
end;

function CreateProcessAndWait(const AppPath, AppParams: string;
Visibility: word): DWord;
var
SI: TStartupInfo;
PI: TProcessInformation;
Proc: THandle;
begin
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
SI.wShowWindow := Visibility;
if not CreateProcess(PChar(AppPath), PChar(AppParams), nil, nil, False,
Normal_Priority_Class, nil, nil, SI, PI) then
raise Exception.CreateFmt('不能执行,请输入或选择可执行文件的名称和路径.返回的错误码为%d',
[GetLastError]);
Proc := PI.hProcess;
CloseHandle(PI.hThread);
if WaitForSingleObject(Proc, Infinite) <> Wait_Failed then
GetExitCodeProcess(Proc, Result)
else
Application.ProcessMessages;
CloseHandle(Proc);
end;
 
你用CREATEPROCESS和SHELLEXECUTEEX试过吗?先试试再说。
XIANJUN的答案也是可行的,DFW上很多人都用过。
 
多人接受答案了。
 
后退
顶部