72 votes

Comment puis-je obtenir un fichier de l'heure de dernière modification en Perl?

Supposons que j'ai un descripteur de fichier $fh. Je peux vérifier son existence avec -e $fh ou la taille du fichier avec l' -s $fh ou un tas d'informations supplémentaires sur le fichier. Comment puis-je obtenir son heure de dernière modification de timbre?

111voto

cowgod Points 5330

Vous pouvez utiliser le module intégré File::stat (inclus en tant que de Perl 5.004).

Appelant stat($fh) () retourne un tableau avec les informations suivantes sur le descripteur de fichier transmis (à partir de la page de manuel perlfunc pour stat):

  0 dev      device number of filesystem
  1 ino      inode number
  2 mode     file mode  (type and permissions)
  3 nlink    number of (hard) links to the file
  4 uid      numeric user ID of file's owner
  5 gid      numeric group ID of file's owner
  6 rdev     the device identifier (special files only)
  7 size     total size of file, in bytes
  8 atime    last access time since the epoch
  9 mtime    last modify time since the epoch
 10 ctime    inode change time (NOT creation time!) since the epoch
 11 blksize  preferred block size for file system I/O
 12 blocks   actual number of blocks allocated

La 9ème élément de ce tableau vous donnera l'heure de dernière modification depuis l'époque (00:00 le 1er janvier 1970 GMT). De ce que vous pouvez déterminer l'heure locale:

my $epoch_timestamp = (stat($fh))[9];
my $timestamp       = localtime($epoch_timestamp);

Pour éviter le nombre magique 9 nécessaire dans l'exemple précédent, en outre, utiliser Time::localtime, un autre module intégré (également inclus dans de Perl 5.004). Cela nécessite certains (sans doute) code plus lisible:

use File::stat;
use Time::localtime;
my $timestamp = ctime(stat($fh)->mtime);

26voto

Michael Carman Points 21983

Utilisez le builtin stat fonction. Ou plus précisément:

my $modtime = (stat($fh))[9]

19voto

David Segonds Points 25602
@array=stat($filehandle);

La modification de l'heure sont enregistrées au format unix dans $array[9]

Ou explicitement:

($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
 $atime,$mtime,$ctime,$blksize,$blocks) = stat($filepath);
 0 dev numéro de périphérique du système de fichiers
 1 ino numéro d'inœud
 2 mode de mode de fichier (type et autorisations)
 3 nlink nombre de (dur) des liens vers le fichier
 4 uid ID numérique de l'utilisateur du propriétaire du fichier
 5 gid numérique de l'ID de groupe du propriétaire du fichier
 6 rdev l'identifiant de l'appareil (fichiers spéciaux seulement)
 7 taille de la taille totale du fichier, en octets
 8 atime dernier accès le temps en secondes depuis l'epoch
 9 mtime dernière modifier le temps en secondes depuis l'epoch
 10 ctime de l'inode de changer de temps en secondes depuis l'epoch
 11 blksize préféré de la taille de bloc du système de fichiers I/O
 12 blocs nombre de blocs alloués

L'époque était à 00:00 le 1er janvier 1970 GMT.

Plus d'informations sur les stat.

16voto

Paul Beckingham Points 7460

Vous avez besoin de la stat d'appel, et le nom de fichier:

my $last_mod_time = (stat ($file))[9];

Perl a aussi une autre version:

my $last_mod_time = -M $file;

mais cette valeur est relative lorsque le programme a commencé. Ceci est utile pour des choses comme le tri, mais vous voudrez probablement la première version.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X