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 :

mettre la liste des fichiers d'un répertoire dans une liste chainée


Sujet :

C

  1. #1
    sos
    sos est déconnecté
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 17
    Par défaut mettre la liste des fichiers d'un répertoire dans une liste chainée
    Bonjour tout le monde,
    Je voudrais mettre la liste des fichiers d'un répertoire dans une liste chainée. voici le code que j'utilise pour récupérer la liste des fichiers d'un répertoire.
    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
     
    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>
     
    int main(void)
    {
       struct dirent *lecture;
       DIR *rep;
       rep = opendir("./");
       while ((lecture = readdir(rep)))
       {
          printf("le fichier: %s\n", lecture->d_name);
       }
       closedir(rep);
     
       return 0;
    }
    pouvez vous me dire comment faire ça ?
    Merci pour votre aide

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Tu veux les mettre dans une liste chaînée, donc tu as déjà une idée de ce que tu veux faire. Est-ce la première fois que tu utilises les listes chaînées ?
    Montre nous ce que tu as fait, ce qui te pose problème et là, on te conseillera.
    Première chose, écris la structure de liste que tu veux utiliser.
    Ecris une fonction de réation de noued.
    Ecris une fonction d'ajout de noeud.
    Ecris une fonjction qui affiche les noeuds.
    Ecris une fonction qui détruit la liste proprement.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    sos
    sos est déconnecté
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 17
    Par défaut
    Bonjour,
    voici le code que j'ai fais; le pb c'est qu'il m'affiche la liste fes fichiers du repertoire donné en paramètre mais en plus il me donne liste vide!!!
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    #define NEW(X) (X*)malloc(sizeof(X))
    typedef struct arc 
    {
    	char *val_arc;
    	struct arc *next;
    	}Arc;
    typedef Arc * LIST;
    /*creation d'une liste*/
    LIST list_make_arc(char* arc)
    {
    	LIST p = NULL;
    	p		= NEW(Arc);
    	p->val_arc	= arc;
    	p->next		= NULL;
    	return p;
    }
     
    /*Ajouter à la queue d'une liste*/
    LIST list_add_arc(LIST L, char* arc)
    {	
    	LIST p	= NULL;
    	LIST L1	= NULL;
    	p		= list_make_arc(arc);	
    	if(p)
    	{
    		if(L == NULL){
    			L = p;
    		}else{
    			L1 = L;
    			while (L1->next != NULL)
    				L1 = L1->next;
    			L1->next = p;
    		}
    	}
    	else
    	{
    		printf("Erreur d'allocation de mémoire !");
    	}
    	return L;
    }
    void list_print(LIST L)
    {
    	LIST p=L;
    	if(p!=NULL)
    	{
    		printf("%s",p->val_arc);
    		list_print(p->next);
    	}
    else
    printf ("liste vide");
    }
     
    LIST listefichiers(char *chemin){
    LIST listef=NULL;
       struct dirent *lecture;
       DIR *rep;
    rep=opendir(chemin);
     
       while ((lecture = readdir(rep)))
       {
         listef=list_add_arc(listef, lecture->d_name);
        printf("FICHIER: %s\n", lecture->d_name);
       }
    closedir(rep);
    }

  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
    le pb c'est qu'il m'affiche la liste fes fichiers du repertoire donné en paramètre mais en plus il me donne liste vide!!!
    Si tu utilises list_print, lorsqu'il a terminé de lister la liste , il affiche "liste vide" ( tu rappelles list_print avec p->next pour argument même si p->next est NULL ).

    Plus discutable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    LIST list_make_arc(char* arc)
    {
    	LIST p = NULL;
    	p		= NEW(Arc);
    	p->val_arc	= arc;
    	p->next		= NULL;
    	return p;
    }
    mis à part qu'il faudrait tester le retour de NEW avant d'écrire p->..., tu copies dans p->val_arc l'adresse de la chaîne (issue de la struct dirent) et non pas la chaîne elle-même. Qu'est ce qui garantit que cette chaîne existe encore après les autres appels à readdir ?
    Tu devrais alloué par malloc de la place pour stocker la chaîne et la copier dedans

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par diogene
    Tu devrais alloué par malloc de la place pour stocker la chaîne et la copier dedans
    ou utiliser strdup()...

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

Discussions similaires

  1. [Python 3.X] [Tkinter] Afficher la liste des fichiers d'un dossier dans une fenêtre.
    Par niduab dans le forum Tkinter
    Réponses: 20
    Dernier message: 26/08/2014, 18h37
  2. Réponses: 6
    Dernier message: 09/05/2014, 17h23
  3. liste récursive des fichiers d'un dossier dans une liste
    Par identifiant_bidon dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2010, 16h33
  4. Réponses: 1
    Dernier message: 06/02/2009, 17h58
  5. [Kylix] Liste des fichiers d'un répertoire
    Par Houben Jacques dans le forum EDI
    Réponses: 3
    Dernier message: 30/11/2002, 21h14

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