Página 1 de 1

Tamaño archivo RAR

NotaPublicado: 2017-10-25 05:53 @287
por silva
Quisiera saber el tamaño de un archivo cuya extension puede variar entre pdf, rar o zip.

Estoy utilizando:

my $tamanio_archivo = -s $archivo;

Pero con la sintaxis de arriba, da CERO como resultado de tamaño cuando el archivo es tipo rar o zip, ¿cómo puedo evaluarlo de otra forma?

Gracias.

Re: Tamaño archivo RAR

NotaPublicado: 2017-10-25 07:06 @337
por explorer
Da igual que sea zip, rar, pdf o cualquier otra cosa. Para Perl, son archivos normales y corrientes. No miran en su interior (salvo que uses un módulo específico para ellos).

Si el operador '-s' devuelve cero, puede ser por que
  • realmente el archivo tenga un tamaño cero. O si estás en Windows, el sistema operativo no lo ha cerrado del todo, y no te deja acceder a él. Aunque tú puedas verlo en el gestor de archivos, el sistema lo puede estar ocupando (por ejemplo, cuando en Windows abrimos un zip como si fuese una carpeta para ver su contenido)
  • $archivo, realmente, no apunta (su ruta) al archivo que queremos analizar (está en un sitio distinto de en donde estamos mirando).
  • realmente, no es un archivo. Podría ser un enlace o vínculo.

Comprueba que estás accediendo de forma correcta haciendo una prueba '-e' (el archivo existe) y '-f' (es un archivo normal).
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use utf8;
  2. my $tamaño_archivo;
  3.  
  4. if (-e $archivo) {
  5.         if (-f $archivo) {
  6.                 $tamaño_archivo = -s $archivo;
  7.         }
  8.         else {
  9.                 die "ERROR: [$archivo] no es un archivo normal.\n";
  10.         }
  11. }
  12. else {
  13.         die "ERROR: no existe el archivo [$archivo].\n";
  14. }
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

(nota de eficiencia: puedes sustituir el segundo '-f $archivo' por '-f _'. Esto está explicado en perldoc -f -X:
Si a cualquiera de los test de archivo (o cualquiera de los
operadores "stat" o "lstat") se les da el identificador de archivo
especial consistente en un solitario guión bajo, entonces se usa
la estructura stat del archivo del test anterior (o el operador
"stat"), ahorrando una llamada del sistema. (Esto no funciona con
"-t", y necesita recordar que "lstat()" y "-l" dejarán valores en
la estructura stat del enlace simbólico, no del archivo real).
(También, si la memoria intermedia de stat se rellenó con una
llamada "lstat", "-T" y "-B" se reinicializarán con los resultados
de "stat _"). Ejemplo:

Re: Tamaño archivo RAR

NotaPublicado: 2017-10-25 08:05 @379
por silva
Gracias, ¡lo probaré!, pero creo que el problema está con Windows: el archivo es muy pesado y no lo ha cerrado todavía.

Re: Tamaño archivo RAR

NotaPublicado: 2017-10-25 14:21 @639
por explorer
Cuando alguna vez tuve que hacer labores de monitorización de un directorio, para mover archivos de un sitio a otro, la técnica que usaba era:
  1. pido el listado de los archivos, ordenados por fecha de modificación (o de creación si el sistema operativo lo permite), de tal manera que me llega una línea por archivo, desde los más modernos a los más viejos
  2. por cada archivo, con la ayuda del operador '-M', me devuelve la diferencia de tiempo entre el momento del arranque del programa y la fecha de modificación del archivo. Si el programa lo ejecuto cada minuto, pues '-M', prácticamente, me está devolviendo la antigüedad del archivo. Ese valor está en días, ¡ojo! Si veía que ese valor era igual o superior a 0,00069 (un minuto), consideraba que el archivo no se ha tocado en un minuto, así que ya lo procesaba y movía
  3. repetir para el resto de archivos. Se podría incluso parar antes si vemos el archivo bandera, que nos marca el final de los archivos ya procesados en el directorio. Recordar actualizar su fecha de modificación con la ayuda de utime().