Bonjour
j'aimerai savoir s'il y a un moyen de récupérer la date de derniere modification d'un fichier
Ou d'un maniere générale, regarder si un fichier a été modifié depuis la derniere exécution de mon programme?
Merci bien
Bonjour
j'aimerai savoir s'il y a un moyen de récupérer la date de derniere modification d'un fichier
Ou d'un maniere générale, regarder si un fichier a été modifié depuis la derniere exécution de mon programme?
Merci bien
De facon standard, non.Envoyé par Neo82
Mais si tu utilises des fonctions POSIX comme stat, tu recuperes une struct stat qui ressemble à cela:
Les trois derniers champs devraient te convenir, non ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 struct stat { dev_t st_dev; /* Périphérique */ ino_t st_ino; /* Numéro i-noeud */ mode_t st_mode; /* Protection */ nlink_t st_nlink; /* Nb liens matériels */ uid_t st_uid; /* UID propriétaire */ gid_t st_gid; /* GID propriétaire */ dev_t st_rdev; /* Type périphérique */ off_t st_size; /* Taille totale en octets */ blksize_t st_blksize; /* Taille de bloc pour E/S */ blkcnt_t st_blocks; /* Nombre de blocs alloués */ time_t st_atime; /* Heure dernier accès */ time_t st_mtime; /* Heure dernière modification */ time_t st_ctime; /* Heure dernier changement */ };![]()
Salut.
Et pour un programme Windows tu peux utiliser la fonction Win32 suivante:
... Qui, également, s'autocommente
Code : Sélectionner tout - Visualiser dans une fenêtre à part BOOL GetFileTime(HANDLE hFile, LPFILETIME lpCreationTime, LPFILETIME lpLastAccessTime, LPFILETIME lpLastWriteTime);![]()
Un historique local pour Visual Studio 2005 et 2008 :
http://www.codeplex.com/VLH2005
La premiere solution me convient mieux car j'utilise Linux, ou Mac OS X
Merci beaucoup je vais voir ce que je peux faire avec ca mais je sens que c'est tout a fait ce qu'il me fallait
Merci bcp!! :)
@+
Juste une petite précision....
Quelle est la différence entre derniere modification et dernier changement?
Merci
Salut !
Je ne suis pas sûr, mais 'dernier changement' doit être en fait 'date de création'...
Sinon ça n'a aucun sens...![]()
C'est bien ce qu'il me semble.. je ne vois pas l'interet de mettre de variables si c'est pour dire la meme chose
Mais c'est curieux que la date de création soit appelée "dernier changement"
Non??
Moi j'ai trouvé cette description :
Mais je ne sais pas ce qu'elle vaut.Le champ st_atime est modifié par les accès au fichier,
c'est à dire avec exec(2), mknod(2), pipe(2), utime(2) et
read(2) (d'au moins un octet). D'autres routines, comme
mmap(2), peuvent ou non mettre à jour ce champ st_atime.
Le champ st_mtime est modifié par des changements sur le
fichier lui-même, c'est à dire mknod(2), truncate(2),
utime(2) et write(2) (d'au moins un octet). D'autre part
le champ st_mtime d'un répertoire est modifié lors de la
création ou la suppression de fichiers en son sein. Le
champ st_mtime n'est généralement pas mis à jour lors de
modification de propriétaire, groupe, mode ou nombre de
liens physiques.
Le champ st_ctime est modifié lors d'une écriture, une
lecture, ou une modification de données concernant l'i-
noeud (propriétaire, groupe, mode, etc...)
Un historique local pour Visual Studio 2005 et 2008 :
http://www.codeplex.com/VLH2005
Un coup d'oeil au man .....Envoyé par Neo82
![]()
<edit>Le champ st_atime est modifié par les accès au fichier, c'est à dire avec exec(2), mknod(2), pipe(2), utime(2) et read(2) (d'au
moins un octet). D'autres routines, comme mmap(2), peuvent ou non mettre à jour ce champ st_atime.
Le champ st_mtime est modifié par des changements sur le fichier lui-même, c'est à dire mknod(2), truncate(2), utime(2) et write(2)
(d'au moins un octet). D'autre part le champ st_mtime d'un répertoire est modifié lors de la création ou la suppression de fichiers
en son sein. Le champ st_mtime n'est généralement pas mis à jour lors de modification de propriétaire, groupe, mode ou nombre de
liens physiques.
Le champ st_ctime est modifié lors d'une écriture, une lecture, ou une modification de données concernant l'i-noeud (propriétaire,
groupe, mode, etc...)
Arf, rolkA![]()
</edit>
Ok merci bien pour ces précisions...
Si tu les a trouvé c'est surement qu'elles sont valables :)
Je vais essayer de voir ce que ca donne pour voir en quelles occasions les differentes variables sont modifiées
@++
Envoyé par Pouic
Au moins avec ton man, on sait que la source est fiable (la mienne venait d'une brève recherche sur le net
)...
Un historique local pour Visual Studio 2005 et 2008 :
http://www.codeplex.com/VLH2005
lol, mon man est en anglais... dc je n'avais pas tout compris, c'est pour ca que je posais la question :)
Merci bien a vous tous
@+
Je crois que c'est résolu, un petit clique en bas à gauche pour une bonne lisibilité du forum serait top merci![]()
Hmmm....
Non en fait c'est pas résolu .. LOL
comment fait on pour comparer deux variables de type t_time?
Merci bcp
PS: apres promis je met le tag résolu :)
@++
Avec ==, <=, >= ......![]()
Un historique local pour Visual Studio 2005 et 2008 :
http://www.codeplex.com/VLH2005
Ah tout simplement??
ok je vais essayer
Merci beaucoup a tout le monde :)
@+
En fait tu peux utiliser difftime (je pensais que ce n'était pas portable):
C'est sans doute mieux, car rien n'indique que >=, = etc soient définis pour time_t (chez moi time_t est un long mais çà dépend des plate-formes)... Par contre, avec un double, tu fais ce que tu veuxHeader File
time.h
Prototype
double difftime(time_t time2, time_t time1);
Description
Computes the difference between two times.
difftime calculates the elapsed time in seconds, from time1 to time2.![]()
Un historique local pour Visual Studio 2005 et 2008 :
http://www.codeplex.com/VLH2005
Ok merci ...
par contre j'ai un petit probleme...
quand je lance la fonction stat, ca amrche nickel, mais apres quand je veux acceder au champ st_mtime (celui qui m'interesse) ca me sort "Bus error" à l'execution, alors que je n'ai aucune erreur à la compilation
Merci
Pour info, voici mon code:
Ca merde a la derniere ligne...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 struct stat *File_Status; time_t Date; stat("test", File_Status); Date = File_Status -> st_mtime;
Merci[/code]
Si je ne m'abuse, stat n'alloue pas de mémoire, c'est toi de le faire. Là tu as défini un pointeur que tu lui envoies, c'est tout. Il faut lui envoyer l'adresse d'une structure existante.
Essaye plutôt çà:
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 struct stat File_Status; time_t Date; stat("test", &File_Status); Date = File_Status.st_mtime;![]()
Un historique local pour Visual Studio 2005 et 2008 :
http://www.codeplex.com/VLH2005
AAAhhhhhhh
je pensais que ca allouait la mémoire....
bon je vais réessayer alors...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager