Comment obtenir la date de création du fichier sous Linux?
Je travaille avec des lots de fichiers qui contiennent des informations sur le même objet à différents moments de sa vie, et la seule façon de commander, c'est par date de création.
J'ai été en utilisant ce:
//char* buffer has the name of file
struct stat buf;
FILE *tf;
tf = fopen(buffer,"r");
//check handle
fstat(tf, &buf);
fclose(tf);
pMyObj->lastchanged=buf.st_mtime;
Mais cela ne semble pas marcher.
Ce que je fais mal? Il existe d'autres, plus fiable/simple manières d'obtenir la date de création du fichier sous Linux?
fstat
n'est pas extraire un fichier "créé" timestamp de la valeur parce que de nombreux systèmes de fichiers à ne pas suivre les données. Quel système de fichiers êtes-vous travailler?Celui qui est le standard pour la dernière version de Ubuntu desktop, je suppose, je suis en cours d'exécution de mon code sur la machine virtuelle (vmware player, pour être exact), et à gauche tous les détails comme système de fichiers pour installer ubuntu.
essayez
stat(buffer, &buf)
au lieu de la non-utile-ici fopen
Si ce code est compilé sans avertissements, vous avez un problème majeur avec votre compilateur. Si ce code est compilé avec des avertissements, apprendre à prêter attention aux mises en garde argument incorrect types (ou un pointeur d'entier conversions) et corriger le code de sorte qu'il se compile sans avertissements.
OriginalL'auteur Srv19 | 2011-05-08
Vous devez vous connecter pour publier un commentaire.
fstat travaux sur les descripteurs de fichier, pas de structures de FICHIER. La version la plus simple:
Vous aurez besoin de savoir si votre système a st_birthtime dans sa structure stat par l'inspection sys/stat.h ou en utilisant une sorte de autoconf construire.
Vous pouvez obtenir le descripteur de fichier par l'utilisation de open(2) ou à l'aide de fileno(tf). Ce que je vous ai donné, cependant, est un moyen pour l'inspecter les attributs sans avoir à ouvrir le fichier. Si vous devez ouvrir le fichier et que vous souhaitez utiliser stdio fonctions, puis fileno est votre ami.
Votre solution de se débarrasser de mon problème. Merci beaucoup. J'ai soupçonné j'étais en mission quelque chose dans l'utilisation de fstat.
OriginalL'auteur Mel
La plus proche approximation 'date de création' est le
st_ctime
membre dans lestruct stat
, mais qui en fait des enregistrements pour la dernière fois le inode changé. Si vous créez le fichier et ne jamais modifier sa taille ou des autorisations, qui fonctionne comme un moment de la création. Sinon, il n'y a pas de trace du moment où le fichier a été créé, au moins dans la norme des systèmes Unix.En fonction de vos objectifs, de les classer par
st_mtime
...ou récupérer les fichiers nommés avec un horodatage dans le nom.Noter que si vous êtes sur Darwin (Mac OS X), le temps de création est disponible. À partir de la page de man pour
stat(2)
:Note le
st_birthtimespec
champ. Remarque, aussi, que toutes les heures sont enstruct timespec
valeurs, alors il existe une sous-deuxième moment (tv_nsec
donne l'ordre de la nanoseconde à la résolution). POSIX 2008<sys/stat.h>
nécessite lastruct timespec
le temps de maintien sur le temps standard; Darwin qui suit.OriginalL'auteur Jonathan Leffler
Pour obtenir la date de création du fichier sous linux, j'utilise la méthode suivante
atime: la Dernière fois que le fichier a été ouvert ou exécuté
ctime: le Temps de l'inode d'information a été mis à jour. ctime obtient également mis à jour lorsque le fichier est modifié
mtime: l'heure de Dernière modification
crtime: heure de création de Fichier
OriginalL'auteur Sathish
Heure de création de fichier n'est stocké nulle part, vous ne pouvez récupérer qu'une des opérations suivantes:
Votre code devrait vous donner la date de dernière modification, cependant. Remarque: vous pouvez utiliser
stat()
au lieu defstat()
sans ouvrir le fichier (stat()
prend le nom de fichier comme paramètre).OriginalL'auteur Code Painters