Fallo ocasional en función addfile (Digest::SHA)
Publicado: 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:
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:
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.
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.
Using perl Syntax Highlighting
- use Digest::SHA;
- my @files;
- my $sha256 = Digest::SHA->new(256);
- foreach my $key (@files) {
- $sha256->addfile($key);
- print "Fichero: $key. Hash: $sha256\n";
- }
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.