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.
chamada do metodo:
Ambas retornar apenas a mensagem "Error". Estou fazendo alguma coisa errada?
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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)