Como descompactar arquivo.zip no Delphi 7
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
Curtidas 0