ضغط الملفات بصيغة zip في الدلفي
#1
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله

خوازمية الضغط الشهيرة ZIP هي أحد أشهر أنواع الملفات المتواجدة في النت ذلك لأنها سريعة الإنتاج وسهلة الاستخدام وفك الضغط، ظهرت هذه الخوارزمية سنة 1989 على يد Phil Katz، واستمرت في التطور إلى يومنا هذا...
طالعوا المزيد حول خوارزمية الضغط ZIP من خلال الرابط (خاصة تركيبة الملفات):
كود :
http://en.wikipedia.org/wiki/File:ZIPformat.jpg
تركيبة ملفات ZIP

هناك مجموعة كبيرة من المصادر المفتوحة والتجارية من مكونات أو لمكتبات للدلفي تساعدتك لتجعل من برنامج يدعم ZIP و UNZIP ضغط وفك ضغط الملفات، وهناك مصادر أخرى لصيغ معروفة مثل RAR ...

وهناك مكتبة ZLib الشهير مرفقة مع أي نسخة دلفي تسمح بضغط الملفات بأحد هذه الصيغ GZ.

نذكر منها على سبيل المثال لا الحصر:
FlexCompress

FlexCompress هو مكون ضغط للدلفي يهدف لإنشاء ملفات تشفير قوية وأفضل من ضغط WinZip وRAR ، ويدعم الملفات كبيرة الحجم > 4 جيجابايت مع استهلاك ذاكرة منخفضة وغيرها الكثير من الميزات المفيدة...

ZipForge

مكون متقدم يدعم PKZip بشكل التام ، والصيغة unzip ، سريع ويدعم تقسيم الملفات الناتجة وأيضا Zip64 ، SFX ، وإصلاحها والحماية بكلمة السر ، وغيرها من الخصائص المفيدة. ZipForge لا يتطلب DLLs ، تجمع مباشرة في ملف تنفيذي، ZipForge مجاني للاستخدام الشخصي والآن مع الدعم الكامل يونيكود!


Abbrevia
Abbrevia هي أدوات مفتوحة المصدر للضغط بالدلفي و سي + + بيولدر ، و Kylix أيضا. وهو يدعم PKZIP 4 و Microsoft CAB ، و gzip وملفات التثبيت الذاتي (Self-Extractor) ، مكونات مرئي يبسط التلاعب مع الملفات المضغوطة.

ZipTV
أحد أشهر مكونات الضغط ZipTV يدعم حاليا أكثر من 46 خوارزميات ضغط وفك الضغط. يمكنك مع ZipTV إنشاء قائمة للملفات،ويدعم ملفات متعددة الأقراص، الحماية بكلمة سر ، والتشفير ، والعثور على ملفات أو ASCII / ثنائية / ستعشري / عشري / ثمانية في البيانات المضغوطة ، التعديل على الملفات المضغوطة، إضافة تعليق، التشفير / فك شفرة الملفات، وتحويل بين صيغ الأرشيف ، واختبار الأرشيف، وإنشاء SFX ملفات فك الضغط الذاتي وUnSFX ، استرجاع كلمة السر المفقودة الخ...
ويدعم الصيغ التالية:
SPLIT / Enhanced Deflate / Deflate64 ZIP, JAR, CAB, LHA, LZH, TAR, GZIP, GZipTar, BH BlakHole, UUE / XXE / ENC, RAR, ARJ, ARC, ...

TZipMaster
TZipMaster مكون مفتوح المصدر، غير مرئي، لصاحبيه: ChrisVleghert وEricW.Engler مجاني يسمح بضغط وفك الضغط عن صيغ ZIP باستعمال مكتبة DLLs.

تتفاوت هذه المكونات فيما بينها في الخصائص والمميزات وتشترك في الخوارزمية الشهير لملفات ZIP مع اختلافات بسيطة.

بالنسبة لي أفضل استعمال مكتبات DLL عوضا عن المكونات حتى يبقى البرنامج قابل للتعديل بسهولة لاحقا...

اليوم اخترت مكون مجاني صغير لصاحبه Angus Johnson ، يمكن استعماله بشكل مكتبة DLL...
يدعم ضغط وفك الضغط للصيغية ZIP، يدعم SFX، تقسيم الملفات، مع إدراج: تعليق، كلمة سر، تعديل حذف ملفات من الأرشيف الناتج، نافذة تقدم عملية الضغط وغير ذلك.

TZip - Version 1.3
للتحميل من هنا.
مرفق مع المكون مثال وملف H e l p
لاستعمال هذا المكون (المكتبة) أضف الوحدتين: ZIP و ZipDlls إلى حقل Uses
ثم أدرج كود إنشاء غرض من النوع TZIP بمثل هذا الكود:
PHP كود :
//إنشاء الغرض
  
Zip := TZip.Create(Self);
try
//مسار ملف المكتبة
  
Zip.DllPath := ExtractFilePath(Application.ExeName);
//قائمة الملفات التي ستضغط
  
Zip.FileSpecList.Clear;
//المسار الكامل للملف الناتج
  
Zip.Filename := FileTarget;
//مسار الملف الناتج
  
Zip.AddPath := ExtractFilePath(copy(FileTarget,3,length(FileTarget)));
//خيارات الضغط
  
Zip.AddOptions := [aoUpdate];
// تعليق يضاف إلى الملف الناتج
  
Zip.ZipComment := MemoComment.Text;
//كلمة السر
  
Zip.Password := Password;
  for 
:= 0 to ListBoxFiles.Items.Count do
    
Zip.FileSpecList.Add(ListBoxFiles.Items[i]);
//بهذا الأمر يتم إنشاء الملف
  
Zip.Add;
finally
  
Zip.FileSpecList.Clear;
//مهم جدا تحرير الغرض عند النهاية
  
Zip.Free;
end

أعددت مثال صغير (بريمج) يبين طريقة ضغط الملفات بهذه المكتبة...
[صورة: litezipcompressor.jpg]
تجدونه في المرفقات مع الكود المصدري ومكتبة المكون في المجد UnitZIP ومعها ملف التعريب الذي أضفته للمكتبة Wink

في انتظار اقتراحاتكم وتعليقاتكم إثراء للموضوع...
تقبلوا تحياتي...


الملفات المرفقة
.7z   LiteZipCompressor.7z (الحجم : 106.19 ك ب / التحميلات : 693)
الرد
#2

ZIP يستخدم خواريزمية Deflate التي هي خواريزمية LZ77 + Huffman coding
بالحديث عن المكونات هناك SevenZipVCL للتعامل مع 7-Zip او 7z حيث نسبة الضغط الاحسن حاليا باستخدام خواريزمية LZMA
http://www.rg-software.de/files/SevenZipVCL_074a.zip
الموقع http://www.rg-software.de/rg/

والسلام عليكم
الرد
#3
من المكتبة Synopse تجميع خوارزميات الضغط في مكتبة وحيدة pascal خام!
مرفق SynLZ و SynZip دون استخدام مكتبات ربط (dll). للاستخدام:
كود :
http://synopse.info/forum/viewtopic.php?pid=163
بشكل مسبط وملف وحيد:
PHP كود :
procedure CompressZip(AFileNameString);
var
  
DataTMemoryStream;
begin
  Data 
:= TMemoryStream.Create;
  
with TZipWrite.Create(ChangeFileExt(AFileName,'.zip')) do
  try
    
Data.LoadFromFile(AFileName);
    
AddDeflated(AnsiString(ExtractFileName(AFileName)), Data.MemoryData.Size);
    
Assert(Count=1);
  finally
    
Free;
    
FreeAndNil(Data);
  
end;
end;


procedure TForm1.Button1Click(SenderTObject);
begin
  CompressZip
('c:\test.txt'); 



الملفات المرفقة
.rar   SynopseZipLZ.rar (الحجم : 35.84 ك ب / التحميلات : 192)
الرد
#4
قام Patrik Spanel انطلاقا من المكتبة القياسية المرفقة مع إصدارات دلفي ZLib
بكتابة تجميع آخر لخوارزمية الضغط Zip صغير الحجم ودون استخدام DLL أيضا
آخر نسخة SciZipFile.pas v.1.4 تعمل على D6-2009 على الأقل متوفرة في Torry:
كود :
http://www.torry.net/pages.php?id=300
مكتبة AmZip عمل صيني كمكتبة لتسهيل استخدام SciZipFile مرفقة بحجمين.
trees.obj وdeflate.obj مكتوبان بـ C++ Builder ومستخدمان في دلفي على شكل object
تحويلهما إلى دلفي متوفر في بعض الأمثلة
منها مثال Chris Rorden الذي أضاف إليه خوارزمية Gzip وTar
كود :
http://www.mccauslandcenter.sc.edu/mricro/ezgz/index.html
تعديل صغير ليعمل على دلفي 7 في المرفق ezgz.

شيء آخر مهم...
إن كنت تستخدم مكتبات مكونات تأكد أولا أنها لا تحتوي على أصناف لخوارزميات ضغط قبل أن تبحث عن مكونات أخرى
مثال مرفق مع Fast Report مكتبات وصنف جاهز TfrxZipArchive. مثال:
PHP كود :
procedure TForm1.Button1Click(SenderTObject);
var
  
zipTfrxZipArchive;
begin
  zip 
:= TfrxZipArchive.Create;
  try
    
zip.AddFile('c:\test.txt');
    
zip.SaveToFile('c:\test.zip');
  finally
    
zip.Free;
  
end;
end
بالتوفيق.


الملفات المرفقة
.rar   AmZip_Zippit.rar (الحجم : 1.93 ك ب / التحميلات : 138)
.rar   ezgz.rar (الحجم : 83.08 ك ب / التحميلات : 220)
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم