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?
Réponses
Trop de publicités?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);
Utilisez le builtin stat fonction. Ou plus précisément:
my $modtime = (stat($fh))[9]
@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.
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.