Пробую следующую функцию:
- Код: Выделить всё
procedure TDownloader.DecompressBZip2(const input: TStream; var res: TMemoryStream;
const BlockSize: Cardinal);
var
Unzipper : TDecompressBzip2Stream;
Blocks : array of Byte;
ReadSize : cardinal;
i,j: integer;
begin
SetLength(Blocks,BlockSize);
try
Unzipper := TDecompressBzip2Stream.Create(input);
except
on e : exception do
begin;
// mDebugLn(e.message);
exit;
end;
end;
try
repeat
ReadSize := BlockSize;
Unzipper.Read(blocks[0],readsize); //Read ReadSize amount of bytes.
Res.Write(Blocks[0],ReadSize);
until readsize = 0;
except
on e : EBzip2 do
if E.ErrCode <> bzip2_endoffile then
raise Exception.CreateFmt('Decompression error: %s %d',[e.message,e.errcode]);
end;
Unzipper.Free;
end;
Что я делаю не так? И собственно вопрос - как скачанный tar.bz2 распаковать и полученный tar положить в другой TMemoryStream?
PS: Laz 0.9.30.4 , win 7, fpc 2.6.0.