- 可可
-
呵呵,,我给你一个解决的办法吧,看你的代码就知道你是下载VCLZIP组件。。
建议你用VCLunzip组件:解压代码如下:
UnZip1.ZipName:="c:Upx.zip";//zip所在目录
UnZip1.ReadZip;
UnZip1.FilesList.Add("*.*");
UnZip1.FilesList.Add(UnZip1.Filename[UnZip1.Count-1] );
UnZip1.DoAll:=false;
UnZip1.DestDir:="c:";//指定目录
UnZip1.RecreateDirs := True;
UnZip1.RetainAttributes := True;
UnZip1.UnZip;
要设置解压时替换原有的文件不弹出提示框,其实很简单在OverwriteMode属性设成Always就可以了!!
- FinCloud
-
这个问题我认为有两种方法可以解决.
1.myzip这个对象的类封装的时候没有对[文件存在是否覆盖]进行处理,那么你可以在类里自行修改.
2.用个最偷懒的办法,先判断解压文件的绝对路径,如果这个文件存在,那么跳过unzip过程即可.代码如下:
在unzip之前加一句[if not FileExists(Destdir+"/"+ZipName) then].
其中[Destdir+"/"+ZipName]的意思是文件的绝对路径,是我根据你的代码推测的,你需要自行测试一下~.(但这样没有达到你要求的"直接复制替换原有的文件").
+q说 232236767
- 康康map
-
先不带密码尝试解压一次或者获取信息一次,如果失败了就说明有密码。
代码:
procedure TForm1.btn1Click(Sender: TObject);
begin
UnZip1.OnBadPassword:=UnZip1BadPassword;
UnZip1.ArchiveStream:=TFileStream.Create("F:古书.zip",fmOpenRead);
if UnZip1.CheckArchive then
begin
showmessage("No Pass");
UnZip1.ArchiveStream.Free;
exit;
//无密码,不解压
end;
//解压过程,略。
UnZip1.ArchiveStream.Free;
end;
procedure TForm1.UnZip1BadPassword(Sender: TObject; FileIndex: Integer;
var NewPassword: String);
begin
NewPassword:="123456"; //123456是真实的密码,这一步可以省
end;
- gitcloud
-
"C:/Program Files/WinRAR/WinRAR.exe" a "d:Music.rar" "D:csMusic"
保存为.bat文件,直接用delphi来执行