PDA

Ver la Versión Completa : Descomprimir con TZipFile


keys
22-12-2017, 08:29:42
Hola a todos, estoy intentando descomprimir un archivo zip con la clase TZipFile del delphi XE TOKIO. Es un fichero muy grande con 479 MB. La copia se hace bien, lo abro con el winzip y veo todos los ficheros dentro con todos los datos.

Luego a la hora de restaurarlo con el TZipfile, al cargarlo con Zip.FileCount me dice que solo hay 7599 ficheros, cuando hay muchos más. Claro si voy restaurando con

For t := 0 to Zip.FileCount - 1
begin
Zip.Extract(Zip.FileNames[t], 'c:\Destino', true);
end;

no me restura todo.

Si lo restauro todo de golpe con Zip.ExtractAll('C:\destino22') me restaura exactamente lo mismo 7599 archivos. Sin embargo con el winzip veo que hay muchas mas y si lo descomprimo que salen muchos más.

¿Ha alguien le ha pasado esto? He tenido que cambiar a la clase de las jcl para poder descomprimir todo.

Un Saludo.

keys
22-12-2017, 10:41:11
Me respondo yo mismo. He encontrado por internet lo siguiente.

TZipFile was introduced in XE2 in 2011. Large .zip files have been around a lot longer than that, and Windows has supported large files > 4GB ever since NTFS was first introduced in NT3. Embarcadero simply didn't bother implementing support for the ZIP64 format (and still haven't) when they created TZipFile.

Es decir no soporta ficheros ZIP grandes. O eso creo entender.

Casimiro Notevi
22-12-2017, 12:14:29
procedure TForm1.Button3Click(Sender: TObject);
Var
Zip :TZipFile;
Begin
Zip := TZipFile.Create;
Try
Zip.Open ('C:\Delphi\Ejemplos\TZipFile\Prueba.zip', zmRead);
Zip.ExtractAll('C:\Delphi\Ejemplos\TZipFile');
Finally
Zip.Free;
End;
End;

479 Mb no es grande. Lo que has leido es para archivos de más de 4 Gigas.

keys
22-12-2017, 13:04:47
Lo primero gracias. He probado a hacer eso, y tambien fichero a fichero y me pasa lo mismo.

Casimiro Notevi
22-12-2017, 13:07:52
Lo primero gracias. He probado a hacer eso, y tambien fichero a fichero y me pasa lo mismo.
¿Seguro? :confused:

keys
22-12-2017, 13:20:29
Si Seguro.

La propiedad Zip.FileCount me devuelve 7599 que son muchos menos de los que tiene.

He cambiado a la clase de los jcl y me retorna todos los ficheros y me los descomprime. Al igual que el winzip.

lo he probado de las dos siguientes formas

for t := 0 to Zip.FileCount - 1 do
begin
Zip.Extract(Zip.FileNames[t],'c:\destino', true);
end;

y

Zip.ExtractAll('c:\Destino');

Casimiro Notevi
22-12-2017, 14:04:03
Será un error de esa versión.
Yo uso Abbrevia (https://sourceforge.net/projects/tpabbrevia/files/).