Página 1 de 1

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

NotaPublicado: 2012-01-03 07:38 @360
por ricar
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.003 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.

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

NotaPublicado: 2012-01-03 10:44 @489
por explorer
Con una prueba '-r' debería ser suficiente, quizás.

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

NotaPublicado: 2012-01-03 10:59 @499
por ricar
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.

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

NotaPublicado: 2012-03-22 01:54 @120
por ricar
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.

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

NotaPublicado: 2012-03-22 05:15 @260
por explorer
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.

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

NotaPublicado: 2012-03-22 08:25 @393
por ricar
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.

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

NotaPublicado: 2012-03-22 11:51 @535
por explorer
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).

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

NotaPublicado: 2012-03-23 07:16 @344
por ricar
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.

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

NotaPublicado: 2012-03-23 07:51 @368
por ricar
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.

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

NotaPublicado: 2012-03-23 08:21 @389
por explorer
¡Puf! Es que Windows... hay que echarle a comer aparte... :lol:

Quizás debas usar Win32::File. Ejemplo.