On Sun, 4 Sep 2016, Marcos Douglas wrote:

Ok, it works now.

For the records, I've used the lib http://www.gocher.me/GZIP (Silvio's
tip) and the function Base64Decode from WST framework
http://svn.code.sf.net/p/lazarus-ccr/svn/wst/trunk/

For some reason the function DecodeBase64 from Synapse doesn't work.
It receives an AnsiString. Instead, the Base64Decode function receives
a TByteDynArray.

The TDataStream class doesn't matter...

So, the code below is ugly, but shows how it works now (before the refactoring).

Thank you all for the help.

=== begin ===

procedure TMainForm.Button2Click(Sender: TObject);
var
 Buf,Buf2: TMemoryStream;
 B: TByteDynArray;
begin
 Buf := TMemoryStream.Create;
 Buf2 := TMemoryStream.Create;
 try
   Buf.LoadFromFile('result.txt');
   B := Base64Decode(TDataStream.New(Buf).AsString,
[xoDecodeIgnoreIllegalChar]);
   Buf.SaveToFile('bytes.txt');
   Buf.Clear;
   Buf.WriteBuffer(Pointer(B)^, Length(B));
   if ZUncompressStream(Buf, Buf2) then
     Buf2.SaveToFile('content.txt');

As far as I know these things can be done with all the FPC classes as well ?
The implementation in base64 unit can perfectly do everything in memory.
And ZUncompressStream can be done with TDecompressionStream ?

Var
  Dest : TFileStream;
  B : TBase64DecodingStream;
  Z : TDecompressionStream;

begin
  Z:=Nil;
  B:=Nil;
  Dest:=Nil;
  try
    B:=TBase64DecodingStream.Create(TFileStream.Create('src',fmOpenRead));
    B.SourceOwner:=True;
    Z:=TDecompressionStream.create(B);
    Z.SourceOwner:=True;
    Dest:=TFileStream.Create('result.txt',fmCreate);
    Dest.CopyFrom(Z,0);
  Finally
    Z.Free;
    Dest.Free;
  end;
end;

Michael.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to