NerdeX 0 Denunciar post Postado Janeiro 14, 2005 Pessoal! Este é o meu 1º post... sinto-me muito feliz e satisfeito com o recebimento do convite do nosso colega e amigo Aroldo Zanella para juntar-me a esta turma, e sabendo-se do seu brilhantismo, dinamismo, dedicação e imensa sabedoria... "de outros carnavais até mesmo"... posso ter a certeza que esta comunidade contém um elevadíssimo nível tecnológico... Como é meu primeiro post, vou-lhes apresentar uma dica muito interessante: Aí está... Veja como comprimir e descomprimir arquivos com a própria RTL do Delphi 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 para a compressão: 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 para a descompresssão 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. Abraço a todos Ricardo Bastos Campos Tec em Proc de Dados e Acad. em Sist de Informação Santa Maria - RS ricbcampos@ubbi.com.br Compartilhar este post Link para o post Compartilhar em outros sites
Dopi 0 Denunciar post Postado Janeiro 14, 2005 Ola NerdeX, seja bem vindo... Muito interessante a dica... Acredito que isso tb seja válido para a CLX, abri o ZLib.pas e notei o seguinte código: {$IFDEF LINUX}const zlibso = 'libz.so.1';{$ENDIF}{$IFDEF MSWINDOWS}{$L deflate.obj}{$L inflate.obj}{$L inftrees.obj}{$L trees.obj}{$L adler32.obj}{$L infblock.obj}{$L infcodes.obj}{$L infutil.obj}{$L inffast.obj}.... Sabe me dizer se dessa maneira á necessário distribuir esses OBJ junto com a aplicação ? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Janeiro 14, 2005 Funciona na versão 5 ? Compartilhar este post Link para o post Compartilhar em outros sites
Beppe 0 Denunciar post Postado Janeiro 14, 2005 Se não me engano, ZLib.pas no Delphi 5 está no CD, pasta Extras.Os .obj são lincados estaticamente, tal qual as .dcu's. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Janeiro 19, 2005 http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites