• Publicidad

Descomprimir archivos zip en Perl

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Descomprimir archivos zip en Perl

Notapor heguirola » 2012-05-20 00:07 @046

Hola. He estado trabajando en descomprimir en mi sitio web, un archivo zip que cargo. Éste lo guardo en el servidor pero lo que ocurre es lo siguiente: Me da el siguiente error:
The following fatal error has occurred:
Write error! 4


Esto lo hace cuando se llama al método de
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $zip->writeToFileNamed()
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


que está debajo de:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $status = $zip->read($pathdir);    # read file contents     
  2.  
  3.         if ( $status != AZ_OK ) {
  4.                 die('Error in file! '.$status);
  5.         }
  6.         else {
  7.                 $zip->extractTree( undef, $pathEX );  # extract files
  8.         }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


les dejo el código debajo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  
  2. if ( -e "$dirDC/$sessionID/TD.zip" ) {
  3.  
  4.         ExtractZipFile( "$dirDC/$sessionID/TD.zip", "$dirDC/$sessionID/" );
  5. }
  6.  
  7. chdir( "$dirDC/$sessionID" );
  8.  
  9. CompressZipFile("import");
  10.  
  11. SaveZipFile( "$dirDC/$sessionID", "import" );
  12.  
  13. #*****************Subrutina****************************#
  14.  
  15. #Compress a file in .zip
  16. sub CompressZipFile {
  17.  
  18.         my ($path) = @_;
  19.  
  20.         #Primero comprobamos que es un directorio
  21.         if ( -d $path ) {
  22.  
  23.                 opendir( DIR, $path );
  24.                 my @conten = readdir(DIR);
  25.                 closedir(DIR);
  26.  
  27.                 #Para cada elemento del directorio
  28.                 foreach (@conten) {
  29.                         if ( $_ eq '.' || $_ eq '..' ) {
  30.  
  31.                                 #print "dentro del IF--> ". $_. "\n";
  32.                                 next;
  33.                         }
  34.  
  35.                         #print "fuera del IF--> ". $_. "\n";
  36.                         CompressZipFile("$path/$_");
  37.  
  38.                 }
  39.         }
  40.         else {
  41.  
  42.                 #En el caso de un archivo, se añade al zip
  43.                 $zip->addFile( $path, $path );
  44.         }
  45. }
  46.  
  47. # Save the Zip file
  48. sub SaveZipFile {
  49.         my ( $path, $directoryname ) = @_;
  50.        
  51.         my $status = $zip->writeToFileNamed( $path . "/$directoryname.zip" );
  52.        
  53.         unless ( $status == AZ_OK )     {
  54.                 die 'Write error! '.$status;
  55.         }
  56. }
  57.  
  58. # Extract the Zip file
  59. sub ExtractZipFile {
  60.  
  61.         my ( $pathdir, $pathEX ) = @_;
  62.  
  63.         my $status = $zip->read($pathdir);    # read file contents     
  64.  
  65.         if ( $status != AZ_OK ) {
  66.                 die('Error in file! '.$status);
  67.         }
  68.         else {
  69.                 $zip->extractTree( undef, $pathEX );  # extract files
  70.         }
  71. }
  72.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

¡¡¡Por favor el lea esto y sepa donde está el error que escriba rápido!!! :shock: :roll: :roll: :roll:
heguirola
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2012-05-09 10:32 @480

Publicidad

Re: Descomprimir archivos zip en perl

Notapor explorer » 2012-05-20 05:38 @276

Yo creo que puede ser por una de estas dos causas:

1.- No hay permiso de escritura en el directorio donde quieres escribir/modificar el archivo, o

2.- Según cuenta el autor en Archive::Zip::FAQ:

P: ¿Por qué no puedo abrir un archivo Zip, añadir un miembro, y escribir el resultado? Obtengo un mensaje de error cuando lo intento.

R: Porque Archive::Zip no (y, generalmente, no puede) lees los contenidos del archivo en memoria. Se requiere que el archivo Zip original permanezca hasta que el nuevo archivo quede completado.

La mejor forma de hacer esto es escribir el Zip a un archivo temporal y luego renombrar el archivo temporal al del anterior nombre (posiblemente después de haberlo borrado).

Archive::Zip v1.02 añadió los métodos de archivado overwrite() y overwriteAs() para hacer eso de forma simple y cuidadosa.

Vea examples/updateZip.pl para un ejemplo de esta técnica.

Write error! 4 también podría indicar un fallo de E/S, por lo que podría indicar un fallo en el disco o que el disco está lleno.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Descomprimir archivos zip en Perl

Notapor heguirola » 2012-05-20 19:07 @838

Gracias, explorer, por responder. Bueno en cuanto a tu respuesta, cuando yo ejecutaba el método de descomprimir una carpeta o directorio me extrae perfectamente lo que tiene el Zip, pero cuando comprimo otro directorio ahí mismo es donde está el error de escritura y me lo crea con los datos del directorio que yo descomprimí... ¿qué será eso? :?: :?: :?:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  
  2. if ( -e "$dirDC/$sessionID/TD.zip" ) {
  3.  
  4.         ExtractZipFile( "$dirDC/$sessionID/TD.zip", "$dirDC/$sessionID/" );
  5. }
  6.  
  7. chdir( "$dirDC/$sessionID" );
  8.  
  9. CompressZipFile("import");
  10.  
  11. SaveZipFile( "$dirDC/$sessionID", "import" );#Cuando hago esto me sale el error
  12.  
  13.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
heguirola
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2012-05-09 10:32 @480

Re: Descomprimir archivos zip en Perl

Notapor explorer » 2012-05-20 19:29 @853

Bien, es posible que mi respuesta no esté clara.

Lo diré de otra manera.

"El $zip de la línea 51 debe ser distinto del de la línea 63".

Más claro: Usa un objeto $zip para realizar la descomprensión, y otro distinto para realizar la comprensión.

Si no es por esto, entonces no sé por qué será...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Descomprimir archivos zip en Perl

Notapor heguirola » 2012-05-20 22:28 @978

Gracias. Voy a probar y le digo... :roll:
heguirola
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2012-05-09 10:32 @480

Re: Descomprimir archivos zip en Perl

Notapor heguirola » 2012-05-24 23:34 @023

Me ha servido perfectamente lo que usted me dijo. Gracias.
heguirola
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2012-05-09 10:32 @480


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 21 invitados

cron