View Full Version : Zlib و مشکل
Delphi Skyline
چهارشنبه 16 شهریور 1384, 12:40 عصر
سلام
من با zlib فایلی را کامپرس کردم اما وقتی فایل کامپرس شده رو باز کردم دیدم اون فایل منو کامپرس نکرده .
چه کنم ؟
m-khorsandi
چهارشنبه 16 شهریور 1384, 13:57 عصر
درود
اگه امکان داره مراحل کارتون رو بنویسید.
Touska
چهارشنبه 16 شهریور 1384, 16:05 عصر
میتونی از اینا هم استفاده کنی :
http://www.touska.persiangig.com/other/comps.zip
Delphi Skyline
چهارشنبه 16 شهریور 1384, 17:26 عصر
با تشکر .
من این کامپاننت رو نوشتم و ازش استفاده کردم .
اینم از مراحل کار :
unit zlibs;
interface
uses
SysUtils, Classes , zlibs;
type
tzlibs = class(TComponent)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
Constructor Create(Aowner : tcomponent);
procedure CompressFiles(Files : TStrings; const Filename : String);
procedure DecompressFiles(const Filename, DestDirectory : String);
{ Published declarations }
end;
procedure Register;
implementation
Constructor tzlibs.Create(Aowner : tcomponent);
begin
INHERITED CREATE(Aowner);
end;
procedure tzlibs.CompressFiles(Files : TStrings; const Filename : String);
var
infile, outfile, tmpFile : TFileStream;
compr : TCompressionStream;
i,l : Integer;
s : String;
begin
if Files.Count > 0 then
begin
outFile := TFileStream.Create(Filename,fmCreate);
try
{ the number of files }
l := Files.Count;
outfile.Write(l,SizeOf(l));
for i := 0 to Files.Count-1 do
begin
infile := TFileStream.Create(Files[i],fmOpenRead);
try
{ the original filename }
s := ExtractFilename(Files[i]);
l := Length(s);
outfile.Write(l,SizeOf(l));
outfile.Write(s[1],l);
{ the original filesize }
l := infile.Size;
outfile.Write(l,SizeOf(l));
{ compress and store the file temporary}
tmpFile := TFileStream.Create('tmp',fmCreate);
compr := TCompressionStream.Create(clMax,tmpfile);
try
compr.CopyFrom(infile,l);
finally
compr.Free;
tmpFile.Free;
end;
{ append the compressed file to the destination file }
tmpFile := TFileStream.Create('tmp',fmOpenRead);
try
outfile.CopyFrom(tmpFile,0);
finally
tmpFile.Free;
end;
finally
infile.Free;
end;
end;
finally
outfile.Free;
end;
DeleteFile('tmp');
end;
end;
procedure tzlibs.DecompressFiles(const Filename, DestDirectory : String);
var
dest,s : String;
decompr : TDecompressionStream;
infile, outfile : TFilestream;
i,l,c : Integer;
begin
// IncludeTrailingPathDelimiter (D6/D7 only)
dest := IncludeTrailingPathDelimiter(DestDirectory);
infile := TFileStream.Create(Filename,fmOpenRead);
try
{ number of files }
infile.Read(c,SizeOf(c));
for i := 1 to c do
begin
{ read filename }
infile.Read(l,SizeOf(l));
SetLength(s,l);
infile.Read(s[1],l);
{ read filesize }
infile.Read(l,SizeOf(l));
{ decompress the files and store it }
s := dest+s; //include the path
outfile := TFileStream.Create(s,fmCreate);
decompr := TDecompressionStream.Create(infile);
try
outfile.CopyFrom(decompr,l);
finally
outfile.Free;
decompr.Free;
end;
end;
finally
infile.Free;
end;
end;
procedure Register;
begin
RegisterComponents('Zlibs', [tzlibs]);
end;
end.
m-khorsandi
چهارشنبه 16 شهریور 1384, 18:05 عصر
چه جالب من نمیدونستم شما کامپوننت ZLib رو نوشتین !!!!!
جالب تر این قسمته:
unit zlibs;
interface
uses
SysUtils, Classes , zlibs;
[Fatal Error] zlibs.pas(5): Program or unit 'zlibs' recursively uses itself
Delphi Skyline
چهارشنبه 16 شهریور 1384, 23:50 عصر
نه یه یونیت به نام Zlib است . من کوداشو به صورت کامپاننت در آوردم .
Delphi Skyline
چهارشنبه 16 شهریور 1384, 23:50 عصر
اون Zlibs رو هم من برای کامپایل اشکال گیری کردم .
rmb_ali
یک شنبه 13 اردیبهشت 1388, 12:34 عصر
من هم یه مشکل با zlib دارم اگر کمک کنید ممنون میشم سورس من اینه البته از اینترنت کپی کردم
procedure TForm1.Button1Click(Sender: TObject);
var
InputStream, OutputStream: TFileStream;
DeCompressionStream: TDecompressionStream;
CompressionStream: TCompressionStream;
InputFileName, OutputFileName: string;
begin
//compress
InputFileName := 'c:\image.png';
OutputFilename := 'c:\image.png.bzip';
InputStream := TFileStream.Create(InputFileName, fmOpenRead);
OutputStream := TFileStream.Create(OutputFileName, fmCreate);
CompressionStream := TCompressionStream.Create( clFastest,OutputStream);
CompressionStream.CopyFrom(InputStream, InputStream.Size);
CompressionStream.Free;
OutputStream.Free;
InputStream.Free;
// decompress
InputFileName := 'c:\image.png.bzip';
OutputFilename := 'c:\image2.png'; //rename to original into final code
InputStream := TFileStream.Create(InputFileName, fmOpenRead);
OutputStream := TFileStream.Create(OutputFileName, fmCreate);
DecompressionStream := TDecompressionStream.Create(InputStream);
OutputStream.CopyFrom(DecompressionStream, 0);
DecompressionStream.Free;
OutputStream.Free;
InputStream.Free;
end;
در خطی که نوشته
OutputStream.CopyFrom(DecompressionStream, 0);
ارور میده و میگه invalid stream operation
نتونستم عیبشو در بیارم لطفا کمک کنید
BEHESHT*
سه شنبه 22 دی 1388, 02:34 صبح
سلام می خوام یه چند تا فایل رو در برنامه ام برای کم کردن حجمش شون کمپرس کنم
. هنگام استفاده دیکمپرس :بامزه:
چطور می تونم از کتابخونه zlib برای این کار استفاده کنم؟:چشمک:
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.