View Full Version : ساخت نرم افزار zip کننده
navid_8x
پنج شنبه 16 خرداد 1387, 13:22 عصر
سلام. آیا dll ، activex یا کامپوننتی برای zip ویا unzip کردن وجود داره؟ می خوام مستقل از ویندوز باشه.
babak_delphi
پنج شنبه 16 خرداد 1387, 14:58 عصر
الگوریتم که هست ولی از یونیت ZLib دلفی هم میتونید استفاده کنید
متد ها و توابعی برای این کار در اون هست
در مورد کامپوننت اطلاع ندارم ولی احتمال میدم باشه
aserfg
پنج شنبه 16 خرداد 1387, 15:00 عصر
فشرده سازي فايل ها در دلفي :
براي فشرده سازي فايل ها در دلفي بايد از يونت ZLib در قسمت Uses پروژه تون استفاده كنيد اين يونت حاوي يه سري كلاس و تابع و روال ( Procedure ) مي باشد كه براي فرا خواني فايل هاي فشرده شده يا فشرده كردن فايل ها و يا خارج ساختن آن ها از حالت فشرده سازي و يا مرور داده ها و اندازه گيري آن ها و ... مي باشد كه از ورژن 5 به بعد در دلفي قبرار داده شده
نكته :در صورتي كه از ورژن هاي قبلي دلفي استفاده مي كنيد سورس اين يونت را از سايت بورلند دانلود كنيد و سپس يونت را رجيستر كنيد يا همراه هر پروژه اي كه مي خواهيد از آن استفاده كنيد قرار دهيد
خب قبل از كار با اين يونت بايد كار با Stream ها را در دلفي بلد باشيد و از كلاس ها و متد هاي ارزشمند آن براي بهبود برنامه تان استفاده كنيد بعد هم بايد يه آشنايي كوچك با دستورات پاسكال براي نوشتن متد هاي مورد نياز تان داشته باشيد كه البته خيلي كم نياز به نوشتن تابع شخصي داريد چون بيشتر تابع ها و روال ها در كتاب خانه گفته شده وجود دارد .
اما ترجيح مي دهم توضيحات بيشتر را طي يك مثال كاربردي بيشتر باز گو كنم پس شروع مي كنيم
1= محيط دلفي رو باز كنيد
2= در قسمت Uses برنامه عبارت ZLib را اضا فه كنيد
3=4عدد دكمه به همراه 2 عدد اديت به همراه 2 عدد ليبل و همچنين دو تا سيو ديالگ و يك عدد اپن ديالوگ روي فرم تون قرار دهيد شكل زير اينتر فيس برنامه را نشان مي دهد ( شما ديگه خودتون كپشن ها يش رو جفت و جور كنيد )
http://home.ripway.com/2004-12/222520/comp.gif
3= حالا بايد يه روال و يه تابع تعريف كنيد تا عمليات فشرده سازي و خرو ج از حالت فشرده را انجام دهد
در اين يونت زد ليب دو كلاس TCompressionStream و TDecompressionStream براي اين كار وجود دارد كه ما بايد با استفاده از اين دو اين كار ها را انجام دهيم خب ابتدا بايد يه فانكشن براي كمپرس ( فشرده سازي) كردن فايل به شكل زير بنويسيد
function CompressStream (aSource, aTarget: TStream): Single;
var
comprStream: TCompressionStream;
begin
comprStream := TCompressionStream.Create(
clFastest, aTarget);
try
comprStream.CopyFrom(aSource, aSource.Size);
Result := comprStream.CompressionRate;
finally
comprStream.Free;
end;
end;خب حالا يه پروا سيجر براي ديكمپرس ( خروج از حالت فشرده) كردن فايل مي نويسيم به شكل زير
procedure DecompressStream (aSource, aTarget: TStream) ;
var
decompStream: TDecompressionStream;
nRead: Integer;
Buffer: array [0..1023] of Char;
begin
decompStream := TDecompressionStream.Create(aSource);
try
repeat
nRead := decompStream.Read(Buffer, 1024);
aTarget.Write (Buffer, nRead);
until nRead = 0;
finally
decompStream.Free;
end;
end;
خب فكر كنم كه كارايي و نوع كار كرد آن ها را فهميده باشيد براي همين در مورد اين دو فانكشن و پراسيجر توضيح نمي دهم .
حالا بايد براي دكمه هاي بروز كه كپشن آن ها 3 تا نقطه بود براي رويداد كليك كد هاي زير را وارد كنيد تا بتوانيم از آدرس فايل ها جهت فشرده سازي آن ها استفاده كنيم پس باتن ها ( دكمه ها ) بروز ( همون سه تا نقطه اي ها ) به ترتين از بالا به پايين بنويسيد
begin
If FileO.Execute Then
Edit1.Text:=FileO.FileName;
end;
و اين هم براي دكمه پاييني :
If FileO.Execute Then
Edit2.Text:=FileO.FileName;
خوب حالا نوبت مي رسه به رويداد دكمه هاي كيليدي
دكمه كامپرس (Compress) را انتخاب كنيد و با دوبار كليك در رويداد كليك آن بنويسيد :
Var
Sourec,Dest:TFileStream;
D:String;
begin
Sourec:=TfileStream.Create(Edit1.Text,FmOpenRead);
If SaveO.Execute Then
Begin
D:=SaveO.FileName;
End;
Dest:=TFileStream.Create(D,FmCreate);
Try
CompressStream(Sourec,Dest);
Dest.Position:=0;
Finally
dest.Free;
Sourec.Free;
End;
end;
خب همين طور كه مي بينيد در قسمت متغير دو تا متغير از نوع تي فايل استريم ( يكي براي فايل اصلي و ديگري براي فايل نهايي) تعريف كرديم و همچنين يك متغير ديگه كه نقش زياد كليدي ندارد
همانطور كه در كد بالا مي بينيد متغير Source برابر ميشه با فايلي كه در بالا انتخاب شده و نوع فايل هم از نوع FmOpenRead يعيني در اين فايل استريم قراره كه يك فايل فراخواني شه بعد هم محل ذخيره فايل نهايي و همچنين متغير دوم فايل استريم كه برابر ميشه با فايل نهايي كه در انتها درآن توسط متد كامپرس فايل كه در بالا تعريف كرديم فشرده ميشه
خب در روال كليك دكمه ديكامپرس كد زير را بنويسيد
Var
Sourec,Dest:TFileStream;
C:String;
begin
Sourec:=TFileStream.Create(Edit2.Text,FmOpenRead);
If SaveO2.Execute Then
Begin
C:=SaveO2.FileName;
End;
DEST:=TfileStream.Create(c,FmCreate);
Try
DecompressStream(Sourec,Dest);
Dest.Position:=0;
Finally
Sourec.Free;
Dest.Free;
End;
end;
babak_delphi
پنج شنبه 16 خرداد 1387, 15:49 عصر
ممنون
من هم همونطور که بالا تر اشاره کردم اونو میشناسم و باهاش کار کردم
ولی یک مشکل یا اون دارم ، شاید شما بتونید رفع کنید و اون اینه که من با اون نمیتونم فولدر رو زیپ کنم و فقط برای فایل جواب میگیرم
شما راهشرو بلدین؟
lord_viper
پنج شنبه 16 خرداد 1387, 18:29 عصر
از کامپوننت zipforge استفاده کنین فرمتهای فشرده سازی زیادی رو پشتیبانی میکنه
Felony
پنج شنبه 16 خرداد 1387, 18:32 عصر
VclZip یکی از عالی ترین هاست.
babak_delphi
پنج شنبه 16 خرداد 1387, 20:17 عصر
آیا این کامپوننت ها مجانی هستند؟
lord_viper
پنج شنبه 16 خرداد 1387, 22:26 عصر
zipforge که کاملا مجانیه
http://www.componentace.com/zip_component_zip_delphi_zipforge.htm
nassim_20
جمعه 18 مرداد 1387, 12:18 عصر
جناب aserfg
روشی که شما در پست شماره 3 عنوان کردید ایا امکان رمز گذاری هم وجود دارد؟
Batman
جمعه 18 مرداد 1387, 19:07 عصر
با سلام
حالا که صحبت از zipforge شد آیا از دوستان کسی مثالی برای شروع کار داره؟
ممنونم
nassim_20
جمعه 18 مرداد 1387, 20:37 عصر
به demo هاش مراجعه کن مثالهای خیلی خوبی داره میتونی ازش استفاده کنی
Batman
جمعه 18 مرداد 1387, 22:41 عصر
به demo هاش مراجعه کن مثالهای خیلی خوبی داره میتونی ازش استفاده کنی
استفاده کردم اما جواب نمیده
nassim_20
شنبه 19 مرداد 1387, 12:42 عصر
چی جواب نمیده اگه مثال Basic رو اجرا کنی می بینی که محتویات پوشه Source رو با نام test.zip در پوشه
Archive فشرده میکنه با دستور addfile
و با دستور ExtractFiles فایلها رو در مسیر Dest از حالت فشردگی خارج میکنه (unzip) که بقیه دستوراتش چیز زیاد سختی نیست اگه متوجه نشدی بگو بیشتر توضیح بدم
nassim_20
شنبه 19 مرداد 1387, 12:42 عصر
دوستان کسی راه حلی برای رمز گذاری از طریق روش پست 3 نداره؟؟؟؟؟؟؟؟؟؟؟؟؟
nassim_20
یک شنبه 20 مرداد 1387, 23:14 عصر
دوستان من همچنان منتظر جواب هستم
taha
دوشنبه 21 مرداد 1387, 13:18 عصر
سلام
ایا امکان رمز گذاری هم وجود دارد؟با استفاده از Zlib مستقیم اینکارو نمی تونی بکنی.
دوستان کسی راه حلی برای رمز گذاری از طریق روش پست 3 نداره؟می تونی با Zlib فایل خودت را فشرده و سپس با یکی از الگوریتم های موجود مثلا Blowfish بافر و یا استریم خودتو Crypt کنی و بالعکس.
nassim_20
دوشنبه 21 مرداد 1387, 19:01 عصر
من با Zlib کار نکردم ولی با zipforge که کار کردم مشکلش این بود که در هنگام unzip کردن نمی تونستم خودم نام فایلی که unzip میشه رو تعیین کنم بلکه به همان نامی که قبلا zip شده بود در می امد که منطقی اش همین است ولی مثالی که در بالا اومده بود این خاصیت رو برای من داشت و من به راحتی می تونستم بگوییم که زمانی که از حالت فشرده خارج میشه با فلان نام ذخیره میشه و از اونجایی که فایلهایی که می خواهم دسترسی داشته باشم تعداد شان زیاد است و من نامشان رو ندارم بنابراین مجبورم که در زمان unzip از نام اختصاصی خودم استفاده کنم بنابراین در هنگام extract امکان تغییر نام به نام اختصاصی خودم وجود ندارد
حالا با این توصیفات ایا Zlib این امکان رو دارد و اینکه چطور میتونم دانلود کنم اگه لینکی معرفی کنید ممنون میشوم
h_mohamadi
سه شنبه 22 مرداد 1387, 13:09 عصر
از کامپونت ziptv استفاده کنید
vjp
سه شنبه 16 تیر 1388, 23:38 عصر
به demo هاش مراجعه کن مثالهای خیلی خوبی داره میتونی ازش استفاده کنی
ببخشید میشه آدرس demo رو برام بذارین؟ پیداش نکردم
ghasemshami
چهارشنبه 01 مهر 1388, 09:58 صبح
zipforge خیلی کار باهاش ساده هستش و کاربرد خیلی بالایی هم داره
AFTABGARDAN2006
دوشنبه 11 آبان 1388, 14:36 عصر
این ZipTV چیه
h_mohamadi
چهارشنبه 12 بهمن 1390, 13:48 عصر
يک کامپوننت است
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.