Ver Mensaje Individual
  #2  
Antiguo 19-08-2003
rrf rrf is offline
Miembro
 
Registrado: ago 2003
Ubicación: S/C Tenerife, España
Posts: 454
Reputación: 23
rrf Va por buen camino
Smile

Hola.

Aquí te envío un ejemplo con los procedimientos ExpandStream y CompressStream que los encontré en una búsqueda que hice por la red (creo que son de un miembro del Team B o algo así, unos expertos en Delphi).

También los procedimientos Descomprime_ZLib y Comprime_ZLib que tienen las llamadas a los procedimientos anteriores. Son de un programa que hice y han sido ligeramente modificados para quitarle lo que puede distraer de tu consulta. Por ello debes tener en cuenta que puede haber algún pequeño error.

Suerte.

Ramón.






procedure ExpandStream(inpStream,outStream: TStream);
var InpBuf,OutBuf: Pointer;
var OutBytes,sz: integer;
begin
InpBuf := nil;
OutBuf := nil;
sz := inpStream.size-inpStream.Position;
if sz > 0 then try
GetMem(InpBuf,sz);
inpStream.Read(InpBuf^,sz);
DecompressBuf(InpBuf,sz,0,OutBuf,OutBytes);
outStream.Write(OutBuf^,OutBytes);
finally
if InpBuf <> nil then FreeMem(InpBuf);
if OutBuf <> nil then FreeMem(OutBuf);
end;
outStream.Position := 0;
end;


procedure CompressStream(inpStream,outStream: TStream);
var InpBuf,OutBuf: Pointer;
var InpBytes,OutBytes: integer;
begin
InpBuf := nil;
OutBuf := nil;
try
GetMem(InpBuf,inpStream.size);
inpStream.Position := 0;
InpBytes := inpStream.Read(InpBuf^,inpStream.size);

CompressBuf(InpBuf,InpBytes,OutBuf,OutBytes);

outStream.Write(OutBuf^,OutBytes);
finally
if InpBuf <> nil then FreeMem(InpBuf);
if OutBuf <> nil then FreeMem(OutBuf);
end;
end;

//-----------------------------------------------------------------------


Procedure Comprime_ZLib ( aaa : String; bbb : String ) ;
VAR
ms1, ms2 : TMemoryStream ;
Begin // aaa : nombre archivo; bbb: Extensión

ms1 := TMemoryStream.Create ;
ms2 := TMemoryStream.Create ;

Try
ms1.LoadFromFile ( aaa + bbb ) ;
CompressStream ( ms1, ms2 ) ; // <<=================
ms2.savetofile (aaa + 'ext' ) ;

Finally
ms2.Free ;
ms1.free ;
end;

end;



Procedure Descomprime_ZLib ( aaa : String; bbb : String ) ;
VAR
ms3, ms4 : TMemoryStream ;

Begin // aaa : nombre archivo; bbb: Extensión

ms3 := TMemoryStream.Create ;
ms4 := TMemoryStream.Create ;

Try

ms3.LoadFromFile ( aaa + bbb ) ;
ExpandStream ( ms3, ms4 ) ;

ms4.SaveToFile ( AAA + 'Ext' ) ;

Finally
ms3.Free ;
ms4.Free ;
end;

end;

Responder Con Cita