Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Descomprimir con TZipFile (https://www.clubdelphi.com/foros/showthread.php?t=92660)

keys 22-12-2017 09:29:42

Descomprimir con TZipFile
 
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 11: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 13:14:29

Código Delphi [-]
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 14: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 14:07:52

Cita:

Empezado por keys (Mensaje 523709)
Lo primero gracias. He probado a hacer eso, y tambien fichero a fichero y me pasa lo mismo.

¿Seguro? :confused:

keys 22-12-2017 14: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 15:04:03

Será un error de esa versión.
Yo uso Abbrevia.


La franja horaria es GMT +2. Ahora son las 11:03:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi