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 :

Problème fscanf et stat


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 146
    Par défaut Problème fscanf et stat
    Bonjour,

    j'ai besoin de votre aide à propos d'un problème de typage des données lors d'un fscanf. Je cherche à lister les fichiers d'un répertoire et à regarder si ils ont été modifiés depuis le dernier listing. Le listing est contenu dans un fichier texte sous la forme nomFichier|taille|dateModif|uid.

    Le problème est que je n'arrive pas à typer mes données lors du fscanf de mon fichier afin de pouvoir les comparer avec les infos retournées par stat. Actuellement j'utilise mon fscanf comme ceci et seule la date ne s'affiche pas correctement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
    char nomFichier[500],date[500];
    long long taille;
    long uid;
    while(fscanf(fichierIn,"%[^|]|%lld|%[^|]|%ld",nomFichier,taille,date,uid)==4)
    {
       printf("nom fichier: %s\n",nomFichier);
       printf("nom fichier: %lld\n",taille); 
       printf("nom fichier: %s\n",date);
       printf("nom fichier: %ld",uid);
    }
    ....
    J'ai toujours un peu de mal avec les pointeurs et char... donc je suppose que mon problème vient de mon allocation mémoire de la variable date. J'ai essayé diverses possibilités sans succès...

    Voila j'espère que j'ai été clair, et que vous pourrez m'aider. Je suis persuadé qu'il ne manque pas grand chose!

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    donc je suppose que mon problème vient de mon allocation mémoire de la variable date.
    Non, fscanf attend comme argument l'adresse où il doit placer le résultat.
    Dans le cas de nomFichier et date, ce sont des tableaux et l'identificateur correspond bien à l'adresse du début du tableau.
    Ce n'est pas le cas des identificateurs non tableau et il faut bien spécifier l'adresse de destination

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(.....nomFichier,&taille,date,&uid)

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 146
    Par défaut
    Merci, effectivement je m'étais trompé.

    Seulement, j'ai toujours le même problème, je n'arrive toujours pas à récupérer la date (il n'y a rien qui s'affiche) . Le fichier que je lis a été rempli précédemment, et pour la date, j'ai utilisé la fonction ctime(date), or cette fonction met un "\n" à la fin de la chaine, ce qui donne dans mon fichier texte:

    nomFichier|taille|date
    |uid
    nomFichier2|taille2|date2
    |uid2
    nomFichier3....

    Peut-être que le problème vient de là? Si oui, comment puis-je supprimer cet "\n", soit lorsque j'insère dans mon fichier, soit dans la lecture.

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Lorsque tu lis date, le '\n' est situé juste avant le '\0'.
    Pour l'éliminer, tu peux faire date[strlen(date)-1] = '\0'
    Tu peux aussi rechercher le '\n' dans la chaîne (strchr) et le remplacer par '\0'

Discussions similaires

  1. problème fscanf et espace
    Par b3lka dans le forum Débuter
    Réponses: 5
    Dernier message: 07/04/2012, 12h30
  2. [DEBUTANT] Problème de lecture avec un fscanf
    Par Pingouin dans le forum C
    Réponses: 26
    Dernier message: 28/05/2006, 18h10
  3. Problème d'actualisation de stats
    Par L'Oracle dans le forum Access
    Réponses: 7
    Dernier message: 10/04/2006, 10h09

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