PDA

View Full Version : سوال: Zlib



peymanjon
یک شنبه 15 بهمن 1391, 09:59 صبح
سلام خدمت دوستان...
من یکسری فایل های dll و bpl و exe بصورت zip شده دارم که در دیتابیس می باشد ، من آن ها را دریافت می کنم و در محلی ذخیره می کنم ، الان می خواهم این فایل را unzip کنم با جستجو در سایت یکسری کد هایی پیدا کردم مثل کد زیر که متاسفانه بعد از unzip شدن حجم فایل بدست آمده (صفر) 0 می باشد و درست این کار را انجام نمی دهد
تابع unzip من :

Function TMainForm.UnZip(Source:TMemoryStream):TMemoryStrea m;
var
DeComprStream:TDecompressionStream;
Buffer: Array[0..4000] of char;
BufLen: Integer;
begin
Result:=TMemoryStream.Create;
DeComprStream:=TDecompressionStream.Create(Source) ;
try
BufLen:=DeComprStream.Read(Buffer,SizeOf(Buffer));
while BufLen>0 do
begin
Result.Write(Buffer,BufLen);
BufLen:=DeComprStream.Read(Buffer,SizeOf(Buffer));
end;
Result.Seek(0,soFromBeginning);

finally
DeComprStream.Free;
end;
end;

و اینم نحوه ی فراخوانی آن :

source:=TMemoryStream.Create();
Dest:=TMemoryStream.Create();
source.LoadFromFile('path zip file');
Dest:=UnZip(source);
Dest.SaveToFile('path unzip file');

من شدیداً لازم دارم که با کد این کار را انجام بدهم و نمی تونم یه برنامه مثل winrar را فراخوانی کنم و از طریق آن این کار را انجام دهم .
لطفاً اگه تابع من مشکل دارد به من کمک کنید و یا اگر تابعی دارید که مطمئن هستید درست است لطف کنید اینجا قرار دهید تا من استفاده کنم.
با تشکر از زحمات شما.

peymanjon
یک شنبه 15 بهمن 1391, 12:34 عصر
لازم به ذکر است من با کامپوننت Ionic.Zip در سی شارپ این فایل ها را zip کردم و در دیتابیس ذخیره کردم و الان مجبورم در دلفی آن ها را باز کنم.

Mask
یک شنبه 15 بهمن 1391, 12:35 عصر
روش زیپ کردنتون به چه شکله؟

hassan_reza
یک شنبه 15 بهمن 1391, 13:13 عصر
Dest.position:=0

peymanjon
یک شنبه 15 بهمن 1391, 13:24 عصر
روش زیپ کردنتون به چه شکله؟


zip = new ZipFile();
zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
lname = "temp" + ".zip";
zip.AddFile("FILE_PATH", "");
zip.Save("zip_path" + lname);



این قسمتی از کدم تو سی شارپ که فایل ها را zip می کنم(از dll ---> Ionic.Zip استفاده می کنم)

BORHAN TEC
یک شنبه 15 بهمن 1391, 13:30 عصر
سلام
اگر از نسخه Delphi XE 2 به بعد استفاده می کنید می توانید این کار را با کلاس TZipFile انجام دهید و اگر هم از نسخه های قدیمی تر استفاده می کنید می توانید این کار را با کامپوننت های شخص ثالث انجام دهید که من قبلاً کار با TVclUnzip رو در لینک زیر توضیح داده ام:
http://barnamenevis.org/showthread.php?339323
موفق باشید...

Mask
یک شنبه 15 بهمن 1391, 14:48 عصر
روش زیپ کردن Zlib روش استاندارد فایلهای زیپ نیست.
برای این منظور ، جهت تکمیل کردن صحبتهای شاهین عزیز از کامپوننتهای آماده ای چون ZipForg (http://www.componentace.com/zip_component_zip_delphi_zipforge.htm) میتونید بهره ببرید.

peymanjon
دوشنبه 16 بهمن 1391, 11:11 صبح
روش زیپ کردن Zlib روش استاندارد فایلهای زیپ نیست.
برای این منظور ، جهت تکمیل کردن صحبتهای شاهین عزیز از کامپوننتهای آماده ای چون ZipForg (http://www.componentace.com/zip_component_zip_delphi_zipforge.htm) میتونید بهره ببرید.



مشکل ZipForg (http://www.componentace.com/zip_component_zip_delphi_zipforge.htm) اینکه rar نمی تونه باز کنه و من فقط تونستن فایل zip بصورت صحیح باز کنم. کامپوننتی سازگار با rar و zip نداریم؟

Mask
دوشنبه 16 بهمن 1391, 15:57 عصر
میتونی یه کلکی بزنی.
خود فایل rar.exe برنامه winrar رو بزاری کنار پروژت و کامندلاین باهاش ارتباط برقرار کنی.
من بدون کامپوننت و به راحتی این کار رو پیشنهاد میکنم.
البه اگه اصرار به استفاده از کامپوننت داری میتونید از کامپوننتی که آقا شاهین معرفی کرده استفاده کنید.

peymanjon
سه شنبه 17 بهمن 1391, 09:07 صبح
میتونی یه کلکی بزنی.
خود فایل rar.exe برنامه winrar رو بزاری کنار پروژت و کامندلاین باهاش ارتباط برقرار کنی.
من بدون کامپوننت و به راحتی این کار رو پیشنهاد میکنم.
البه اگه اصرار به استفاده از کامپوننت داری میتونید از کامپوننتی که آقا شاهین معرفی کرده استفاده کنید.

این کار را من انجام دادم ولی اگه بدونی چقدر در پشتیبانی به مشکل می خورید دیگه هیچ وقت به کسی این راه را پیشنهاد نمی کنید :قهقهه: بعضیا پاکش می کنند بعضیا جابه جا می کنن و ....به نظرم بهتره تمام کار ها در کد برنامه و توسط کامپوننت انجام بشه در این مورد خاص من.

Mask
سه شنبه 17 بهمن 1391, 12:18 عصر
این کار را من انجام دادم ولی اگه بدونی چقدر در پشتیبانی به مشکل می خورید دیگه هیچ وقت به کسی این راه را پیشنهاد نمی کنید :قهقهه: بعضیا پاکش می کنند بعضیا جابه جا می کنن و ....به نظرم بهتره تمام کار ها در کد برنامه و توسط کامپوننت انجام بشه در این مورد خاص من.

این یه پیشنهاد بود.
در ضمن من این فایل رو کنار برنامه نمیزارم.جایی مثل شاخه system یا system32 میزارم و اونجا ازش استفاده میکنم.