GARANTIR DESCONTO

Fórum (Des)Compactação com ZLib #350133

05/12/2007

0

Saudações Amigos.
Estive lendo o tópico [url=http://scriptbrasil.com.br/forum/index.php?showtopic=91047]http://scriptbrasil.com.br/forum/index.php?showtopic=91047[/url] e estou utilizando o código para fazer alguns testes de compactação com TCompressionStream e TDecompressionStream da ZLib segundo o código postado retirado do ´Torry´s Delphi Pages´
O algoritmo funciona apenas quando se tem [b:a8a06f7195]mais de 1[/b:a8a06f7195] arquivo compactado. Digo isso porque eu estou tentando descompactar um único mísero arquivo e a linha ´infile.Read(c,SizeOf( c )); { number of files }´ me retorna um número gigante e na segunda iteração do FOR dá erro de criação de arquivo referenciando o arquivo desta forma: ´C:\TEMP\C:\TEMP\TESTE.EXE´. Eu deduzo que na segunda iteração o bendito esteja copiando o caminho do arquivo então eu comentei o ´S := [b:a8a06f7195]Dest[/b:a8a06f7195]+S´ e adicionei o ´[b:a8a06f7195]Dest[/b:a8a06f7195]´ no ´outfile := TFileStream.Create(s,fmCreate);´ ficando assim ´outfile := TFileStream.Create([b:a8a06f7195]Dest+[/b:a8a06f7195]s,fmCreate);´. Mas mesmo assim ele me retorna um erro, desta vez diferente ´Stream read error´.
[b:a8a06f7195][color=red:a8a06f7195]Detalhe Importante:[/color:a8a06f7195][/b:a8a06f7195] o único arquivo compactado retorna ao seu tamanho original, então porque o algoritmo me retorna erro?
Alguém conseguiu fazer esse código funcionar?
Seguem meus códigos
procedure TForm1.CompressFiles(Files : TStrings; const Filename : String);
var
  InFile, OutFile, TmpFile : TFileStream;
  Compr : TCompressionStream;
  I, L : Integer;
  S : String;
begin
  if Files.Count > 0 then
  begin
OutFile := TFileStream.Create(Filename,fmCreate);
try
  { the number of files }
  L := Files.Count;
  OutFile.Write(L,SizeOf(L));
  for I := 0 to Files.Count-1 do
  begin
InFile := TFileStream.Create(Files[I],fmOpenRead);
try
  { the original filename }
  S := ExtractFilename(Files[I]);
  L := Length(S);
  OutFile.Write(L,SizeOf(L));
  OutFile.Write(S[1],L);
  { the original filesize }
  L := InFile.Size;
  OutFile.Write(L,SizeOf(L));
  { compress and store the file temporary}
  TmpFile := TFileStream.Create(´tmp´,fmCreate);
  Compr := TCompressionStream.Create(clMax,TmpFile);
  try
Compr.CopyFrom(InFile,L);
  finally
Compr.Free;
TmpFile.Free;
  end;
  { append the Compressed file to the destination file }
  TmpFile := TFileStream.Create(´tmp´,fmOpenRead);
  try
OutFile.CopyFrom(TmpFile,0);
  finally
TmpFile.Free;
  end;
finally
  InFile.Free;
end;
  end;
finally
  OutFile.Free;
end;
DeleteFile(´tmp´);
  end;
end;

procedure TForm1.DecompressFiles(const Filename, DestDirectory : String);
var
  Dest,S: String;
  Decompr: TDecompressionStream;
  InFile, OutFile: TFilestream;
  I,L,C: Integer;
begin
  Dest   := IncludeTrailingPathDelimiter(DestDirectory);
  InFile := TFileStream.Create(Filename,fmOpenRead);
  try
{ number of files }
InFile.Read(C,SizeOf(C));
for I := 1 to C do
begin
  { read filename }
  InFile.Read(L,SizeOf(L));
  SetLength(S,L);
  InFile.Read(S[1],L);
  { read filesize }
  InFile.Read(L,SizeOf(L));
  { Decompress the files and store it }
  S := Dest+S; //include the path
  OutFile := TFileStream.Create(Dest+S,fmCreate);
  Decompr := TDecompressionStream.Create(InFile);
  try
OutFile.CopyFrom(Decompr,L);
  finally
OutFile.Free;
Decompr.Free;
  end;
end;
  finally
InFile.Free;
  end;
end;



Marcosrocha

Marcosrocha

Responder

Posts

07/12/2007

Nerdex

Amigo, escrevi isto a décadas, bastava vc dar uma procurada antes:

[url]http://forum.devmedia.com.br/viewtopic.php?t=61350&highlight=[/url]


Responder

Gostei + 0

07/12/2007

Marcosrocha

NerdeX
Esse seu código funciona com compactação e descompactação de apenas 1 arquivo ou também funciona com 2 ou mais? Porque esse código eu tenho também e ele é usado apenas para 1 arquivo. No caso eu queria que funcionasse tanto para 1 quanto para 200 arquivos.


Responder

Gostei + 0

08/12/2007

Nerdex

Amigo ... :shock:

Leia o tópico inteiro no qual te informei acima.
A resposta está lá.


Responder

Gostei + 0

08/12/2007

Nerdex

Olha aí ô:

Mamão com açúcar ... :roll:

[url]http://forum.clubedelphi.net/viewtopic.php?t=60429&postdays=0&postorder=asc&start=0[/url]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar