![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пример работы с ZLib [D7, WinXP]
Sphinx © (2005-03-16 22:29:00)Господа, не могли бы вы привести пример работы с Zlib-ом ?
Или объясните почему в следующем коде приaCompres.Freeполучается AV ? :(
procedure TForm1.Button2Click(Sender: TObject);
begin
// CreateFile(PChar(Edit2.Text), 0, FILE_SHARE_READ, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
aDest := TFileStream.Create(Edit2.Text, fmOpenWrite);
aSource := TFileStream.Create(Edit1.Text, fmOpenRead);
aCompres := TCompressionStream.Create(clDefault, aDest);
aCompres.Write(aSource, aSource.Size);
aDest.Free;
aSource.Free;
aCompres.Free;
end;
AlterEgo of WondeRu (2005-03-17 00:36:00) [1]я написал модуль, но правда он для ZlibEx, но легко переделать в стандартный
unit uCompressRoutines;
interface
uses
Classes, ZlibEx;
function CompressStream (aSource, aTarget: TStream): Single;
procedure DecompressStream (aSource, aTarget: TStream);
implementation
function CompressStream (aSource, aTarget: TStream): Single;
var
comprStream: TZCompressionStream;
begin
aSource.Position := 0;
comprStream := TZCompressionStream.Create(aTarget, zcMax);
try
comprStream.CopyFrom(aSource, aSource.Size);
Result := comprStream.CompressionRate;
finally
comprStream.Free;
end;
end;
procedure DecompressStream (aSource, aTarget: TStream) ;
var
decompStream: TZDecompressionStream;
begin
decompStream := TZDecompressionStream.Create(aSource);
try
aTarget.CopyFrom(decompStream, 0);
aTarget.Position := 0;
finally
decompStream.Free;
end;
end;
end.
и пример
BlobField := FieldByName('BLOB_CONTENT');
BS := CreateBlobStream(BlobField, bmWrite);
BS.Size := 0;
TempBMP.LoadFromFile(dlgOpen.FileName);
TempStream := TMemoryStream.Create;
try
TempBMP.SaveToStream(TempStream);
CompressStream(TempStream, BS);
finally
TempStream.Free;
end;
Piter (2005-03-17 00:21:00) [2]Sphinx © (16.03.05 22:48) [2]
Это весь код, кроме объявления переменных больше ни чего нету...
а я вроде не просил весь код :)
Я спрашивал, чему равен aCompres на строчках:
1) aCompres := TCompressionStream.Create(clDefault, aDest);
2) aCompres.Write(aSource, aSource.Size);
P.S. Дебагером посмотри
Sphinx (2005-03-16 22:48:00) [3]> а разве с ним не идет пример работы?
В SimpleДельфийской папки не нашел :(
> А чему равен aCompres ДО вызова
Это весь код, кроме объявления переменных больше ни чего нету...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ZLib;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
Button3: TButton;
Edit2: TEdit;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
aSource: TFileStream;
aDest: TFileStream;
aCompres: TCompressionStream;
aDecompres: TDecompressionStream;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Edit1.Text := OpenDialog1.FileName;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// CreateFile(PChar(Edit2.Text), 0, FILE_SHARE_READ, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
aDest := TFileStream.Create(Edit2.Text, fmOpenWrite);
aSource := TFileStream.Create(Edit1.Text, fmOpenRead);
aCompres := TCompressionStream.Create(clDefault, aDest);
aCompres.Write(aSource, aSource.Size);
aDest.Free;
aSource.Free;
aCompres.Free;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Edit2.Text := OpenDialog1.FileName;
end;
end.
Piter (2005-03-16 22:43:00) [4]Sphinx © (16.03.05 22:29)
Господа, не могли бы вы привести пример работы с Zlib-ом ?
а разве с ним не идет пример работы?
объясните почему в следующем коде при aCompres.Free получается AV ?
А чему равен aCompres ДО вызова
TCompressionStream.Create(clDefault, aDest);7
и чему он же равен ДО вызова
aCompres.Free;
?