IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

date derniere modification d'un fichier


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Points : 38
    Points
    38
    Par défaut date derniere modification d'un fichier
    Bonjour à tous!

    je cherche à connaitre la date de derniere modification d'un fichier.
    Pour cela, j'utilise "stat", mais ensuite, je ne sais pas lire la valeur renvoyée.
    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct stat *s; 
    stat(fichierVoc,s);
    struct tm *p;
    time_t fff=&(s->st_mtime);
    p=localtime(&fff);
    printf("le %d %d %d, ", p->tm_mday, p->tm_mon, 1900 +p->tm_year);
    printf("et il est %02uh %02umin %02usec.\n", p->tm_hour, p->tm_min, p->tm_sec);
    Cependant, cela m'indique que mon fichier a été modifié dans les année 70... la c'est sur, je n'utilise pas bien ces fonctions.

    Pouvez-vous m'aider?

    Par avance merci!!

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 410
    Points : 23 809
    Points
    23 809
    Par défaut
    Bonsoir,

    Citation Envoyé par morpheusmg Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    struct stat *s; 
    stat(fichierVoc,s);
    Cette partie est incorrecte. stat() attend un pointeur vers un buffer qu'elle puisse remplir. Il faut donc allouer une vraie structure stat (et pas un pointeur), puis lui passer l'adresse de cette structure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    struct stat s;
    stat (fichierVoc,&s);
    Bon courage.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    @ Obsidian: merci beaucoup, ça marche.
    C'est dommage quand même, j'étais pas loin!

    Juste une question:
    Je ne vois toujours pas la différence entre définir un pointeur vers une structure (l'erreur que je commettais) et déclarer ma structure puis donner l'adresse de cette structure.

    Au final, le pointeur c'est l'adresse de la structure, donc mes deux phrases précédentes sont équivalentes non? [question rhétorique, puisque je vois qu'avant ça marchais pas et maintenant si, mais je ne comprends pas pourquoi]

    A oui, voici le code qui marche (merci a Obsidian!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct stat s; //inscrit la date de deniere modif du fichier de voc
    stat("essai.txt",&s);
    struct tm *p;
    time_t fff=s.st_mtime;
    p=localtime(&fff);
    printf("le %d %d %d, ", p->tm_mday, p->tm_mon, 1900 + p->tm_year);
    printf("et il est %02uh %02umin %02usec.\n", p->tm_hour, p->tm_min, p->tm_sec);

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 410
    Points : 23 809
    Points
    23 809
    Par défaut
    Citation Envoyé par morpheusmg Voir le message
    @ Obsidian: merci beaucoup, ça marche.
    C'est dommage quand même, j'étais pas loin!
    Ne t'inquiètes pas, c'est le lot de tous les programmeurs.
    Même ceux qui ont trente ans de carrière derrière eux peuvent encore bloquer des jours entiers sur un point-virgule mal placé (surtout à l'approche des deadlines).

    Juste une question: Je ne vois toujours pas la différence entre définir un pointeur vers une structure (l'erreur que je commettais) et déclarer ma structure puis donner l'adresse de cette structure. Au final, le pointeur c'est l'adresse de la structure, donc mes deux phrases précédentes sont équivalentes non? [question rhétorique, puisque je vois qu'avant ça marchais pas et maintenant si, mais je ne comprends pas pourquoi
    Tu as tout-à-fait raison de soulever ce point, car la « rhétorique » et plus généralement la sémantique vont souvent de pair, dans les spécifications d'un langage, avec les aspects techniques proprement dits.

    L'idée est que, lorsque tu as une structure « stat » et que tu réclames son adresse en mémoire, cette adresse est de type « struct stat * », soit « pointeur sur une structure stat », ce qui est normal.

    Lorsque tu déclares un « pointeur sur une struct stat », ce pointeur est en lui-même une variable. Son type est bien le bon (et d'ailleurs, le compilateur l'admet sans broncher) mais la valeur qu'il contient n'est pas du tout initialisée. Le contenu du pointeur est aléatoire (il dépend généralement de ce qui se trouve en mémoire à l'endroit où ce pointeur a été déclaré) et, en tout état de cause, il ne pointe rien de valide puisqu'à aucun moment, tu n'as réservé l'espace nécessaire à la structure en question, que la fonction puisse remplir.

    Présenté autrement, la fonction attend simplement que tu lui indiques un buffer dans lequel elle puisse déposer ses infos.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Points : 38
    Points
    38
    Par défaut
    Merci beaucoup Obsidian pour toutes ces infos! J'y vois plus clair!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Date derniere modification d'un fichier
    Par clao260 dans le forum Macro
    Réponses: 1
    Dernier message: 15/10/2013, 11h16
  2. Date de derniere modification d'un fichier
    Par ninsekh dans le forum VB.NET
    Réponses: 1
    Dernier message: 31/08/2007, 21h11
  3. Comment trouver la dernière date de modification d'un fichier
    Par je®ome dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 24/05/2006, 14h23
  4. Réponses: 20
    Dernier message: 17/03/2005, 16h26
  5. [langage] Date de modification d'un fichier
    Par Cyspak dans le forum Langage
    Réponses: 2
    Dernier message: 24/06/2003, 16h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo