Structure de données à utiliser pour le parcours de dossier [C] - C - Programmation
Marsh Posté le 02-11-2010 à 20:21:05
Peut-être qu'il serait plus simple d'afficher les résultats au fur et à mesure plutôt que de les stocker.
Sinon, la structure est celle d'une arborescence, c'est-à-dire :
Code :
|
Marsh Posté le 03-11-2010 à 00:23:34
Je rajouterais un pointeur child_node, sur le premier élément fils dans le cas d'un répertoire.
Marsh Posté le 03-11-2010 à 01:10:06
Merci pour vos réponses.
J'ai donc utilisé ta structure de données (Tree ?) en rajoutant un pointeur vers le premier élément fils.
Code :
|
Ma structure File est toute simple :
Code :
|
J'ai créé une méthode d'insertion qui va bien :
Code :
|
Maintenant j'essaie de parcourir mon arbre. Un parcours en profondeur me suffirait. Après diverses recherches, il semblerait qu'une fonction récursive soit nécessaire. Voici ce à quoi j'arrive :
Code :
|
Bien entendu, ça ne m'affiche pas tout, et je vois pourquoi :
- 1er appel à displayChildren avec le premier noeud, il l'affiche. Ensuite il fait appel au next (des fois qu'il y en aurait), et comme il n'y en a pas, il s'arrête. Or mon premier noeud à des fils, et ces derniers sont ignorés ...
Je suis mal parti ?
Marsh Posté le 03-11-2010 à 09:37:06
Je n'ai pas regardé dans le détail, je laisse cela aux bon spécialistes du C de ce forum.
Juste quelques remarques sur la nomenclature :
Code :
|
Il ne faut pas nommer de la même manière la structure (le premier Tree) et l'espace alloué pour la structure (le dernier Tree). Une convention assez répandue est de nommer la structure en la faisant commencer par un tiret de soulignement, ce qui donnerait :
Code :
|
En plus, il y a une confusion à cause du typedef.
Pour infos, le typedef n'est pas obligatoire, mais les profs l'aiment beaucoup. Quand on l'utilise, une convention assez répandue est de donner un nom tout en majuscules.
Si on utilise un typedef, alors, il dvient inutile de répeter le mot struct. Gagner ces 6 lettres est un avantage (pour certains (personnellement, je n'utilise japmais typedef car je trouve que cela rend le code moins lisible en cachant ce mot struct, mais c'est un débat de trolls)).
Citation : Leaf *leaf ... File *file; |
Il vaut mieux éviter d'avoir des noms qui se ressemblent trop, car on a vite fait d'oublier la majuscule ou la minuscule.
Marsh Posté le 03-11-2010 à 12:39:41
Merci pour tes remarques, mais j'ai toujours eu l'habitude (grâce / à cause des profs ) d'utiliser typedef.
pour les noms de variables, je me sers de la règles : commence par une majuscule, c'est un type, commence par une minuscule, c'est une variable, et ça se passe bien.
Reste plus qu'à voir pour le parcours de l'arbre
Marsh Posté le 03-11-2010 à 14:46:11
Je verrais plutot ton fonction displayChildren comme ca (non testée!):
Code :
|
Marsh Posté le 03-11-2010 à 14:55:53
pour faire ce genre de traitements, j'aurais intuitivement envie d'éviter de stocker des infos sur chaque fichier en mémoire vu que le nombre de fichiers à traiter va probablement être conséquent.
Je te conseillerais plutôt de partir plus dans une optique de requête et appliquer cette requête sur chaque fichier / dossier en faisant une passe sur ton disque.
La requête sachant elle-même si elle doit compter des fichiers, calculer une taille ou autre. Ca a un autre avantage, c'est que tu pourras faire des requêtes composites assez aisément avec un système de ce genre.
Marsh Posté le 02-11-2010 à 19:25:55
Bonjour à tous.
J'ai un programme à faire qui à pour but de parcourir un répertoire et ses sous-répertoires, pour ensuite afficher divers résultats (Nombre de fichiers par utilisateur, leur taille totale cumulées, etc).
Je suis en train de réfléchir à la structure de données à utiliser, mais je n'arrive pas à voir comment je pourrais stocker toutes ses informations.
J'aimerais procéder ainsi :
- Parcours de tous les fichiers (dossier et sous-dossiers)
- A chaque fichier, je stock l'utilisateur (l'owner), la taille du fichier et le nom du fichier bien sûr
- Je parse le résultat suivant ce qui m'est demander
Pour la structure à utiliser, j'étais parti sur une liste par dossier, seulement j'ai un problème :
- Je vais parcourir le premier dossier, créer une liste comprenant un nombre de noeuds égal au nombre de fichier dans le dossier. Quid des sous-dossiers ? Il me faudrait alors une liste de liste. Mais quid des sous-sous-dossiers ?
Je sais pas si vous voyez mon soucis, mais je ne vois pas trop quelle genre de structure 'dynamique' adopter pour un tel projet ...
Merci par avance pour vos réponses.
---------------
:o