ورود

View Full Version : آموزش: یک کد جالب در مورد کامپوننت TVclUnzip



BORHAN TEC
دوشنبه 11 اردیبهشت 1391, 18:40 عصر
سلام:قلب:

یکی از مشکلات مهم در خصوص کامپوننت TVclUnZip این است که اگر فایل هایی که در پوشه های تو در تو باشند را به صورت فایل Zip در آورید این کامپوننت در موقع Unzip کردن فایل Zip دچار مشکل می شود. به عنوان مثال فرض کنیدکه یک فایل زیپ با نام upd.zip داریم که شامل فایلهای زیر است:
Dir1/Dir2/blue.avi
Dir1/Dir2/Dir3/patchbuild.avi
Dir1/Dir2/Dir3/sfxbuild.avi
Dir1/Dir2/Dir3/swoosh.avi
Dir1/Dir2/Dir3/uncompressedbuild.avi
Dir1/Dir2/Dir3/webbuild.avi
Dir1/Dir2/green.avi
Dir4/compress.avi
Dir4/Dir5/green.avi
Dir4/Dir5/patchbuild.avi
Dir4/Dir5/sfxbuild.avi
Dir4/Dir6/decompress.avi
Dir4/Dir6/swoosh.avi

من مشکل این کامپوننت را توانسته ام با بکارگیری یونیت IOUtils حل کنم. :لبخند:توجه داشته باشید که این یونیت از نسخه 2010 به دلفی اضافه شده است. برای حل این مشکل می توانید از کدی شبیه به کد زیر استفاده کنید:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, VCLUnZip, StdCtrls, kpZipObj, IOUtils, StrUtils;

type
TForm1 = class(TForm)
Button1: TButton;
VCLUnZip1: TVCLUnZip;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
with VCLUnZip1 do
begin
ZipName := ExtractFilePath(Application.ExeName) + 'upd.zip';
Password := '1234';
ReadZip;
for i := 0 to Count - 1 do
begin
if (RightStr(FullName[i], 1) = '\') or
(RightStr(FullName[i], 1) = '/') then
begin
TDirectory.CreateDirectory(ExtractFilePath(Applica tion.ExeName)
+ 'Test2\' + FullName[i]);
end
else
begin
FilesList.Add(Filename[i]);
end;

Memo1.Lines.Add(FullName[i]);
end;

DestDir := ExtractFilePath(Application.ExeName) + 'Test2';
RecreateDirs := False;
DoAll := False;
DoProcessMessages := True;
UnZip;
end;
end;

end.

هدف ایندکس کردن این مطلب جالب بود که به حمد خدا حاصل شد! :چشمک:
موفق باشید...