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 :

Lecture de fichier la galère


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Lecture de fichier la galère
    Bonjour tout le monde, dans le cadre de mon projet de stage, je travail sur du c langage que j'ai découvert en fait ... lundi.


    On m'a demandé de réaliser un readdir() pour avoir la liste des fichiers d'un répertoire, j'ai donc pensé à le mettre dans un tableau et ensuite je le compare à un autre tableau renfermant le contenu d'un fichier normalement si là aussi je ne me suis pas gourré aussi.

    Cependant je n'arrive pas à stocker ce readdir() dans le tableau je crois et je suis assez exaspéré pour tout vous dire...

    Les déclarations sont faites en global je vous fait juste part de ce qui peut vous interessez.

    je vous montre le code :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    FILE * fichier, * fichier2;
    DIR * test;
    char *tab[10000], *tabfich[10000];
    struct dirent *tableau;
    int j=0,temp=0;
     
    void Lecture()
     
    {
        while (tableau=readdir(test)!=NULL)
            {
                tab[j]=tableau->d_name;
                j++;
                temp++;
            }
            j=0;
            while (fscanf(stdin,"%S",tabfich[j]))
            {
            if (strcmp(tab[j], tabfich[j])!=0)
            {
                ouinon=1;
                tab[temp]=tableau->d_name;
                temp++;
            }
            j++;
            }
    }

  2. #2
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Quelques remarques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        while (tableau=readdir(test)!=NULL) 
            { 
                tab[j]=tableau->d_name; 
                j++; 
                temp++; 
            }
    La condition sur le while doit être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ((tableau=readdir(test))!=NULL)
    readdir va réécrire la structure tableau et placer le nom suivant dans le même tableau (tableau->d_name) que le nom précédent. En conséquence, on ne peut pas se contenter de copier l'adresse de la chaîne(tableau->d_name) dans tab[j], ce sera toujours la même adresse et la chaîne sera la même pour tout le monde :ce sera le nom du dernier fichier. Pour chaque nouveau nom, il faut créer une nouvelle chaîne, copier dedans la chaîne tableau->d_name et mettre son adresse dans tab[j]. qq chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        while ((tableau=readdir(test))!=NULL)
            {
                tab[j]= malloc(strlen(tableau->d_name)+1);
                strcpy(tab[j],tableau->d_name);
                j++;
                temp++;
            }
        tab[j] = NULL;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       while (fscanf(stdin,"%S",tabfich[j])) 
            {...
    tabfich est un tableau de pointeur (sur char) pas un tableau de char. On ne peut pas mettre dedans la chaîne entrée sur stdin. Le programme va planter. Accessoirement, je n'est pas compris le but de cette portion de code.

    Important : débarrasse toi au plus vite de ces horribles variables globales qui n'ont pas lieu d'être et compliquent inutilement l'interprétation du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void Lecture(char *dirname)
    {
      DIR * test;
      struct dirent *tableau;
      char *tab[10000]; // ATTENTION Tableau LOCAL
      int j, temp;
      .....
       if ((test = opendir(dirname)) != NULL)
       {
         j = temp = 0;
        while ((tableau=readdir(test))!=NULL)
        .......
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    tabfich est un tableau de pointeur (sur char) pas un tableau de char. On ne peut pas mettre dedans la chaîne entrée sur stdin. Le programme va planter. Accessoirement, je n'est pas compris le but de cette portion de code.
    cette portion de code est faite pour tester si lles chaine de caractère dans le fichier et dans le tableau sont les memes. Dans ce cas là il ne fait rien. Si elles sont différents alors il stocke donnée dans un autre tableau. Ce tableau par la suite est utilisé pour mettre à jours le fichier d'index des fichiers.

Discussions similaires

  1. [Windows]lecture des fichier lnk (raccourcis)
    Par Tiaps dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 21/10/2009, 19h27
  2. [jsp]lecture de fichier
    Par antigone dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 04/09/2003, 11h05
  3. [AS400][Intranet][PC] Lecture de "fichiers" AS400
    Par lando dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 16/07/2003, 11h11
  4. Lecture de fichier
    Par Watcha dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 04/03/2003, 20h43
  5. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 09h43

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