Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 20 de Julho de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
34 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Compressão e Descopressão de arquivos com a própria RTL do Delphi
Publicado por nerdeX : Segunda, Janeiro 17, 2005 - 11:24 GMT-3 (6871 leituras)
Comentários 1 Comentário   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador Não me perguntem o porquê, mas tenho um certo facínio por compressão de dados, sendo que já testei vários componentes.
Hoje não uso nenhum deles e sim um pequeníssimo arquivo da própria RTL do Delphi chamado zLib.pas.
Fiquei surpreso com os resultados de eficiência, performance e taxas de compressão obtidos nos meus testes, onde equipara-se ao uso do compressor UPX.exe (algorítmo de compressão NRV criado por Markus F.X.J. Oberhumer e László Molnár).

Bem... agora vamos ver como é fácil, simples e leve sua implementação usando a zLib:

Insira zLib no Uses da sua Unit...

procedure TForm1.CompressãoClick(Sender: TObject);
var
FileIni, FileOut: TFileStream;
Zip: TCompressionStream;
begin
FileIni:=TFileStream.Create('C:\pasta\...arquivo a ser comprimido...', fmOpenRead and fmShareExclusive);
FileOut:=TFileStream.Create('C:\pasta\...arquivo comprimido...', fmCreate or fmShareExclusive);
Zip:=TCompressionStream.Create(clMax, FileOut);
Zip.CopyFrom(FileIni, FileIni.Size);
Zip.Free;
FileOut.Free;
FileIni.Free;
end;

procedure TForm1.DescompressãoClick(Sender: TObject);
var
FileIni, FileOut: TFileStream;
DeZip: TDecompressionStream;
i: Integer;
Buf: array[0..1023]of Byte;
begin
FileIni:=TFileStream.Create('C:\pasta\...arquivo comprimido...', fmOpenRead and fmShareExclusive);
FileOut:=TFileStream.Create('C:\pasta\...arquivo descomprimido...', fmCreate or fmShareExclusive);
DeZip:=TDecompressionStream.Create(FileIni);
repeat
i:=DeZip.Read(Buf, SizeOf(Buf));
if i <> 0 then FileOut.Write(Buf, i);
until i <= 0;
DeZip.Free;
FileOut.Free;
FileIni.Free;
end;

Dependendo da tua necessidade... poderá adaptá-lo para que execute a compressão e descompressão de pastas inteiras e também que realize um teste de verificação na integridade dos arquivos com o auxílio de uma tabela CRC 32.

Ricardo Bastos Campos
Tec em Proc de Dados e Acad. em Sist de Informação
Santa Maria - RS
ricbcampos@ubbi.com.br


Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: vitorrubio@gmail.com (vitorrubio@gmail.com) : Jan 23, 2009 - 02:50
(Informações sobre o membro | Enviar uma mensagem)
O mais didático e direto artigo que eu já li sobre zlib.

Pena que a zlib seja bastante limitada. Para fazer algo como comprimir uma pasta inteira você precisa de muito código, ou units de terceiros.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados