• Publicidad

Fallo ocasional en función addfile (Digest::SHA)

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Fallo ocasional en función addfile (Digest::SHA)

Notapor ricar » 2012-01-03 07:38 @360

Hola a todos.

Tengo un problema con la función addfile() del módulo Digest::SHA.

En ocasiones con determinados ficheros falla la función y termina el programa:
Read failed: Bad file descriptor at program.pl line 5

Lo que quiero es controlar ese error para que el programa continúe.

Según el autor del módulo, dicha función falla (croak) cuando no puede leer el fichero por cualquier razón:
The $io_handle is read until EOF and the content is appended to the message we calculate the digest for. The return value is the $ctx object itself.

The addfile() method will croak() if it fails reading data for some reason. If it croaks it is unpredictable what the state of the $ctx object will be in. The addfile() method might have been able to read the file partially before it failed. It is probably wise to discard or reset the $ctx object if this occurs.

In most cases you want to make sure that the $io_handle is in "binmode" before you pass it as argument to the addfile() method.


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Digest::SHA;
  2. my @files;
  3. my $sha256 = Digest::SHA->new(256);
  4. foreach my $key (@files) {
  5.     $sha256->addfile($key);
  6.     print "Fichero: $key. Hash: $sha256\n";
  7. }
  8.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

El problema como digo es que, en ocasiones (porque está en uso o por cualquier otra razón), la función "casca" y el programa no prosigue. Por tanto, me gustaría saber si hay alguna opción de controlar ese error para continuar con la ejecución del programa.

Muchas gracias.

Un saludo,
Ricar.
ricar
Perlero nuevo
Perlero nuevo
 
Mensajes: 71
Registrado: 2009-07-13 07:29 @353

Publicidad

Re: Fallo ocasional en función addfile (Digest::SHA)

Notapor explorer » 2012-01-03 10:44 @489

Con una prueba '-r' debería ser suficiente, quizás.
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: Fallo ocasional en función addfile (Digest::SHA)

Notapor ricar » 2012-01-03 10:59 @499

Hola Explorer.

Creo que lo he solucinado utilizando el módulo Digest::SHA::PurePerl. Aun estoy haciendo pruebas pero de momento está funcionando.

Muchas gracias.

Un saludo,
Ricardo.
ricar
Perlero nuevo
Perlero nuevo
 
Mensajes: 71
Registrado: 2009-07-13 07:29 @353

Re: Fallo ocasional en función addfile (Digest::SHA)

Notapor ricar » 2012-03-22 01:54 @120

Hola, explorer.

Perdona la "mega" tardanza, pero he caído en la cuenta revisando "mis" foros que tenía una duda.

explorer escribiste:Con una prueba '-r' debería ser suficiente, quizás.


¿Con la opción -r a qué te refieres expecíficamente?. ¿Me podrías poner un pequeño ejemplo?

Muchas gracias.

Un saludo,
Ricar.
ricar
Perlero nuevo
Perlero nuevo
 
Mensajes: 71
Registrado: 2009-07-13 07:29 @353

Re: Fallo ocasional en función addfile (Digest::SHA)

Notapor explorer » 2012-03-22 05:15 @260

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if (not -r $file) {
  2.     print "El archivo $file no se puede leer.\n";
  3. }
  4. else {
  5.     $sha256->addfile($key);
  6.     ...;
  7. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Más información en perldoc -f -X.
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: Fallo ocasional en función addfile (Digest::SHA)

Notapor ricar » 2012-03-22 08:25 @393

Hola explorer.

Lo que hago es hacer un OPEN del fichero y si hay algún problema, no realizo el addFile.

Yo creo que es similar a utilizar -r.

Un saludo,
Ricar.
ricar
Perlero nuevo
Perlero nuevo
 
Mensajes: 71
Registrado: 2009-07-13 07:29 @353

Re: Fallo ocasional en función addfile (Digest::SHA)

Notapor explorer » 2012-03-22 11:51 @535

Aunque obtienes el mismo resultado, no son operaciones similares.

Con la prueba -r no tienes que abrir el archivo, que es más costosa desde el punto de vista de consumo de recursos por parte del sistema operativo (creación de búferes, además).
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: Fallo ocasional en función addfile (Digest::SHA)

Notapor ricar » 2012-03-23 07:16 @344

Hola explorer.

Es curioso pero con la opción -r, me da error.

Cuando intento leer el fichero pagefile.sys que está en uso, como sabéis, con la opción -r "casca" el programa. Me da un error relacionado con permisos.

Con la opción open, no me da error porque la condición "si OPEN haz addfile sino no hagas nada" funciona.

¿Se os ocurre alguna otra alternativa?

Saludos,
Ricar.
ricar
Perlero nuevo
Perlero nuevo
 
Mensajes: 71
Registrado: 2009-07-13 07:29 @353

Re: Fallo ocasional en función addfile (Digest::SHA)

Notapor ricar » 2012-03-23 07:51 @368

Me contesto sobre por qué no funciona con -r:

"-r File is readable by effective uid/gid."

Ya sé que no es una solución y por qué pero aún tengo el problema.

¿Alguna idea?

Muchas gracias.

Un saludo,
Ricar.
ricar
Perlero nuevo
Perlero nuevo
 
Mensajes: 71
Registrado: 2009-07-13 07:29 @353

Re: Fallo ocasional en función addfile (Digest::SHA)

Notapor explorer » 2012-03-23 08:21 @389

¡Puf! Es que Windows... hay que echarle a comer aparte... :lol:

Quizás debas usar Win32::File. Ejemplo.
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


Volver a Avanzado

¿Quién está conectado?

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