Obtenir la dernière modification du fichier dans Linux
Je suis en train de travailler sur un programme C là que j'ai besoin pour obtenir la dernière date de modification du fichier. Ce que fait le programme est une fonction parcourt chaque fichier dans un répertoire et lorsqu'un fichier particulier(s) est trouvé, il appelle une autre fonction pour vérifier que la dernière modification du fichier.
Dans le répertoire, il existe un mylog.txt.1
mylog.txt.2
et mylog.txt.3
etc. Quand je liste le répertoire sous linux à l'aide de la ll commande je vois que mylog.txt.1
et mylog.txt.2
ont été modifiés le 4 Mai et mylog.txt.3
a été modifié le 3 Mai.
Lorsque le programme vérifie chacun de ces fichiers cependant, il est toujours de retour le 3 mai. Ci-dessous le code que j'utilise.
void getFileCreationTime(char *filePath)
{
struct stat attrib;
stat(filePath, &attrib);
char date[10];
strftime(date, 10, "%d-%m-%y", gmtime(&(attrib.st_ctime)));
printf("The file %s was last modified at %s\n", filePath, date);
date[0] = 0;
}
J'ai essayé toutes les différentes variations de st_ctime
c'est à dire st_mtime
et st_atime
mais ils sont tous de retour le 3 mai.
Merci pour toute aide que vous pouvez fournir.
source d'informationauteur Boardy
Vous devez vous connecter pour publier un commentaire.
C'est un de ces cas où des fuseaux horaires de l'importance. Vous obtenez
gmtime
de last_mtime
. Vous devriez plutôt utiliserlocaltime
viz.c'est parce que
ls
utilise vos informations de fuseau horaire, et lorsque vous avez utiliségmtime
comme une partie de l'écran, elle a délibérément omis informations sur le fuseau horaire.Cela a bien fonctionné pour moi:
Choses à corriger:
st_ctime
.stat()
réussit avant d'utiliser son résultat.strftime(date, sizeof date, ...
pour supprimer le risque de l'utilisation de la mauvaise taille de la mémoire tampon.J'ai d'abord soupçonné que votre système de fichiers n'a tout simplement pas en charge le suivi de la dernière modification, mais puisque vous dites que d'autres outils de gérer le montrer, je soupçonne que le code est la rupture pour quelque raison que ce soit.
Pourrait-il que les noms de fichiers ne sont pas des noms de chemin, c'est à dire qu'ils ne comprennent pas le bon préfixe de répertoire?