Zoals belooft hierbij de code voor het zippen en unzippen van een stream
In mijn geval is de verwerkingstijd geen issue het gaat om relatief kleine bestanden (maar wel vele kleintjes) die na een meting opgelsagen moeten worden
Voor het uitpakken geldt het zelfde het is maar 1 klein bestand dat verwerkt hoeft te worden.
Code:
var sql:string;
OrgStream:Tstream;
ZipStream:Tstream;
UnzipStream:Tstream;
ms :TMemorystream;
Zip:TZipFile;
LocalHeader: TZipHeader;
begin
sql:= 'select * from Axial_data where pijp_nr = '+ Pijpnr.ToString;
firebirdDB.query_open(sql);
OrgStream:=FireBirdDB.query.createblobstream(FireBirdDB.query.Fieldbyname('waveform_data'),bmread);
label1.Caption:= 'Org file size = '+(OrgStream.Size/1000).ToString + 'kB';
Zip:=TZipFile.Create;
ZipStream:=TMemorystream.Create;
Zip.Open(Zipstream,zmwrite);
Zip.Add(OrgStream,'test');
zip.Close;
label2.Caption:= 'Zipped file size = '+(ZipStream.Size/1000).ToString + 'kB';
UnZipStream:=TMemorystream.Create;
ZipStream.Position:=0;
try
Zip.Open(ZipStream, zmReadWrite);
Zip.Read(0, UnzipStream, localHeader);
Zip.Close;
except
on E: EZipException do
begin
showmessage('geen zip bestand');
UnzipStream.Position:=0;
UnzipStream.CopyFrom(OrgStream);
end
end;
label3.Caption:= 'UnZipped file size = '+(UnZipStream.Size/1000).ToString + 'kB';
Zip.Free;
OrgStream.Free;
ZipStream.Free;
UnzipStream.Free;
Bookmarks