• Publicidad

Tamaño archivo RAR

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Tamaño archivo RAR

Notapor silva » 2017-10-25 05:53 @287

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.
silva
Perlero nuevo
Perlero nuevo
 
Mensajes: 82
Registrado: 2011-05-24 05:59 @291

Publicidad

Re: Tamaño archivo RAR

Notapor explorer » 2017-10-25 07:06 @337

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.002 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:
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: Tamaño archivo RAR

Notapor silva » 2017-10-25 08:05 @379

Gracias, ¡lo probaré!, pero creo que el problema está con Windows: el archivo es muy pesado y no lo ha cerrado todavía.
silva
Perlero nuevo
Perlero nuevo
 
Mensajes: 82
Registrado: 2011-05-24 05:59 @291

Re: Tamaño archivo RAR

Notapor explorer » 2017-10-25 14:21 @639

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().
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 Intermedio

¿Quién está conectado?

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