Como descompactar arquivo.zip no Delphi 7

20/02/2018

0

Estou tentando descompactar um arquivo.zip pelo delphi 7, tentei fazer a descompactação com 2 funções diferentes e as mesmas retornaram erro.

Procedure descompactar(ArquivoZip: TFileName; DiretorioDestino: string);
var
  NomeSaida: string; 
  FileEntrada, FileOut: TFileStream; 
  Descompressor: TDecompressionStream; 
  NumArq, I, Len, Size: Integer; 
  Fim: Byte;

begin
  FileEntrada := TFileStream.Create(ArquivoZip, fmOpenRead and fmShareExclusive);
  Descompressor := TDecompressionStream.Create(FileEntrada);
  Descompressor.Read(NumArq, SizeOf(Integer));
  try
    I := 0;
    while I < NumArq do begin
      Descompressor.Read(Len, SizeOf(Integer));
      SetLength(NomeSaida, Len);
      Descompressor.Read(NomeSaida[1], Len);
      Descompressor.Read(Size, SizeOf(Integer));
      FileOut := TFileStream.Create(
        IncludeTrailingBackslash(DiretorioDestino) + NomeSaida,
        fmCreate or fmShareExclusive);
      try
        FileOut.CopyFrom(Descompressor, Size);
      finally
        FileOut.Free;
      end;
      Descompressor.Read(Fim, SizeOf(Byte));
      Inc(I);
    end;
  finally
    FreeAndNil(Descompressor);
    FreeAndNil(FileEntrada);
  end;
end;


function Descomprime(sArquivo: String;sDestino:String): TStringList;
var
  B: array[1..2048] of byte;
  R: Integer;
  vSrc: TStream;  // source file stream
  vDest: TStream;  // destination file stream
  vDecompressor: TStream;  // compression stream
begin
  if not FileExists(sArquivo) then
    raise Exception.Create('O diretório do arquivo não existe!');

  vSrc := TFileStream.Create(sArquivo, fmOpenRead);
  try
    vDecompressor := TDecompressionStream.Create(vSrc);


    try
      vDest := TFileStream.Create(sDestino, fmCreate);
      try
        repeat
          R := vDecompressor.Read(B, SizeOf(B));
          if R > 0 then
            vDest.Write(B, R);
        until R < SizeOf(B);
      finally
        vDest.Free;
      end;
    finally
      vDecompressor.Free;
    end;
  finally
    vSrc.Free;
  end;

end;


chamada do metodo:
descompactar('C:\\xml\\produtos_28.zip','C:\\xml');
Descomprime('C:\\xml\\produtos_28.zip','C:\\xml');


Ambas retornar apenas a mensagem "Error". Estou fazendo alguma coisa errada?
Danilo Pereira

Danilo Pereira

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar