Accueil > Forum > > > > Comptage de fichiers + poids du dossier avec fonction FindFirst et Récursivité
Comptage de fichiers + poids du dossier avec fonction FindFirst et Récursivité
dimanche 10 mai 2009 à 15:08:53 |
Comptage de fichiers + poids du dossier avec fonction FindFirst et Récursivité

Jaybiboo
|
Bonjour à tous ceux qui prendront le temps de me lire ! Actuellement en fin de BTS Informatique et Réseau pour l'Industrie et les Services techniques, je dois bientôt rendre mon projet. Il comporte une partie de développement et je ne suis pas trop doué. Je dois faire un programme qui testera si un logiciel s'est bien installé. Pour ce, le programme doit compter le nombre de fichiers présents dans un répertoire, et rapporter son poids total. La fonction findfirst m'a semblé bonne, c'est donc grâce à celle ci que j'ai pondu le code ci dessous. Il faut cependant penser à la récursivité, c'est à dire que lorsque le programme voit un sous dossier dans le dossier spécifié, il doit le parcourir et incrémenter les compteurs de nombre de fichier et du poids total. Ceci est également vrai pour des sous-sous-dossier, etc... Je ne sais pas du tout si je m'y suis bien pris pour le code, comme dit plus haut, je ne suis pas très doué, et je m'excuse pour les éventuelles absurdités que vous pourrez lire... Je vous remercie d'avance pour votre lecture et votre éventuelle aide. #include #include #include #include #include #include void explorerDossier(char nomDossier,*nf,*td); void main (void) { int nf,td; //déclaration des variables NombreFichier nf et TailleDossier td nf=0; //mise à 0 du nombre de fichiers td=0; //mise à 0 de la taille du dossier explorerDossier("C:\\*.*",nf,td); //appel de la fonction exploreDossier qui devra chercher dans le repertoire C:/ } //======================================================================================================= void explorerDossier(char nomDossier[],int *nf, int *td) { struct ffblk ffblk; //initialisation de la structure ffblk cout << nomDossier; //affichage du nom du dossier de base int done; done = findfirst(nomDossier,&ffblk,FA_DIREC); // on définit la condition "done" while (!done){ //tant qu'il reste des éléments if (ffblk.ff_attrib!=FA_DIREC) { //si c'est un fichier printf(" %s : %d", ffblk.ff_name,ffblk.ff_fsize); //alors on affiche le nom et la taille de ce fichier (*nf)++; //et on incrémente de 1 le compteur du nombre de fichiers *td=*td+ffblk.ff_fsize; //et on ajoute le poids de ce fichier au poids total du dossier *td } else{ //sinon for (ffblk.ff_name!="." && ffblk.ff_name!=".." ){ // pour les dossiers n'étant pas "." ou ".." explorerDossier(char nomDossier[],nf,td); //alors on rappelle la fonction elle meme } } done = findnext(&ffblk); //tant qu'il reste des éléments } } ps : je travaille en C avec Borland C++ Builder 5.02 mais si le travail se simplifie en utilisant du C++ avec C++ builder 6, je dispose de ce logiciel.
|
|
dimanche 10 mai 2009 à 15:11:10 |
Re : Comptage de fichiers + poids du dossier avec fonction FindFirst et Récursivité

Jaybiboo
|
mince, le message n'est pas en forme.... comment faire pour afficher mon code source de telle sorte qu'il soit lisible ?
|
|
dimanche 10 mai 2009 à 15:21:16 |
Re : Comptage de fichiers + poids du dossier avec fonction FindFirst et Récursivité

Jaybiboo
|
Bonjour à tous ceux qui prendront le temps de me lire !
Actuellement en fin de BTS Informatique et Réseau pour l'Industrie et les Services techniques, je dois bientôt rendre mon projet. Il comporte une partie de développement et je ne suis pas trop doué.
Je dois faire un programme qui testera si un logiciel s'est bien installé. Pour ce, le programme doit compter le nombre de fichiers présents dans un répertoire, et rapporter son poids total. La fonction findfirst m'a semblé bonne, c'est donc grâce à celle ci que j'ai pondu le code ci dessous. Il faut cependant penser à la récursivité, c'est à dire que lorsque le programme voit un sous dossier dans le dossier spécifié, il doit le parcourir et incrémenter les compteurs de nombre de fichier et du poids total. Ceci est également vrai pour des sous-sous-dossier, etc...
Je ne sais pas du tout si je m'y suis bien pris pour le code, comme dit plus haut, je ne suis pas très doué, et je m'excuse pour les éventuelles absurdités que vous pourrez lire...
Je vous remercie d'avance pour votre lecture et votre éventuelle aide.
//========================================================================
#include <stdio.h> #include <dir.h> #include <conio.h> #include <dos.h> #include <stdlib.h> #include <iostream.h> void explorerDossier(char nomDossier,*nf,*td); void main (void) { int nf,td; nf=0; //mise à 0 du nombre de fichiers td=0; //mise à 0 de la taille du dossier explorerDossier("C:\\*.*",nf,td); } //======================================================================================================= void explorerDossier(char nomDossier[],int *nf, int *td) { struct ffblk ffblk; cout << nomDossier; int done; done = findfirst(nomDossier,&ffblk,FA_DIREC); while (!done){ if (ffblk.ff_attrib!=FA_DIREC) { printf(" %s : %d", ffblk.ff_name,ffblk.ff_fsize); (*nf)++; *td=*td+ffblk.ff_fsize; } else{ for (ffblk.ff_name!="." && ffblk.ff_name!=".." ){ explorerDossier(char nomDossier[],nf,td); } } done = findnext(&ffblk); } }
|
|
dimanche 10 mai 2009 à 16:15:10 |
Re : Comptage de fichiers + poids du dossier avec fonction FindFirst et Récursivité

rt15
|
Bienvenue, "Réponse acceptée", c'est pas pour dire que tu accèptes la réponse, mais que c'est la réponse que tu attendais. Qui corrige ton problème quoi. Je désaccepte. Soit dit en passant, quel est ton problème ? Je suis pas trop famillié avec ton code... Pour faire de la programmation windows, on inclus généralement surtout windows.h. A vu de nez j'ai un gros doute sur tes égalités, ffblk.ff_name!="." et l'autre. Si c'est du char*, un strcmp est probablement plus adapté.
Pour la taille des fichiers tu as GetFileSize de windows.h. Mais tu as peut être une autre solution dans dir.h ou autre...
|
|
dimanche 10 mai 2009 à 16:53:04 |
Re : Comptage de fichiers + poids du dossier avec fonction FindFirst et Récursivité

Jaybiboo
|
"Réponse acceptée", c'est pas pour dire que tu accèptes la réponse, mais que c'est la réponse que tu attendais. Qui corrige ton problème quoi. Je désaccepte.
D'accord, je le saurais pour la prochaine fois :) Soit dit en passant, quel est ton problème ?
Heu.... Erreurs de compilation... Mais le truc c'est que je ne sais meme pas si ca tient la route la façon dont j'ai écris mon code, il y a peu être des abbérations à corriger en premier lieu, c'est ce que je cherche comme aide ici. A vu de nez j'ai un gros doute sur tes égalités, ffblk.ff_name!="." En fait c'est suite à un conseil de mon prof de dev, lorsque je parcoure les sous dossier d'un repertoire, il ne faut pas tenir compte des dossiers systeme présents dans chaque dossier c'est à dire le dossier "." et ".." J'ai donc fait une boucle FOR avec comme condition que l'atribut NAME soit different de . et .. Le symbole pour dire "different de..." est bien != non ? | Bienvenue, "Réponse acceptée", c'est pas pour dire que tu accèptes la réponse, mais que c'est la réponse que tu attendais. Qui corrige ton problème quoi. Je désaccepte. Soit dit en passant, quel est ton problème ? Je suis pas trop famillié avec ton code... Pour faire de la programmation windows, on inclus généralement surtout windows.h. A vu de nez j'ai un gros doute sur tes égalités, ffblk.ff_name!="." et l'autre. Si c'est du char*, un strcmp est probablement plus adapté.
Pour la taille des fichiers tu as GetFileSize de windows.h. Mais tu as peut être une autre solution dans dir.h ou autre...
| Pour la taille des fichiers tu as GetFileSize de windows.h. Mais tu as peut être une autre solution dans dir.h ou autre...
Merci du conseil, je vais regarder de ce coté là Si d'autres idées vous viennent.... n'hésistez pas, je vous en serais très reconnaissant.
|
|
dimanche 10 mai 2009 à 19:20:56 |
Re : Comptage de fichiers + poids du dossier avec fonction FindFirst et Récursivité

rt15
|
Oui, != est bien pour dire "différent de".
Mais les chaînes de caractères en C ne se manipulent pas de la même manière qu'en VB ou qu'en PHP.
Tu compares probablement des char*. Un char*, c'est un pointeur sur un char. Donc là, tu regarde si l'adresse contenue dans ffblk.ff_name est ma même que l'adresse de la chaîne constante ".". Ce qui ne peut pas arriver.
Pour faire une comparaison de chaîne, il faut le faire explicitement, avec strcmp.
C'est assez logique en fait... En C, tout le jeu d'instruction, if et le reste, ça ne fait que des choses très basique (Comparaison d'entiers, calculs simples, déplacement d'un entier...) Une comparaison de chaîne, c'est pas anodin. Il faut une boucle. Donc ça, c'est une fonction, par exemple strcmp, qui va s'en charger. En C, on voit tout de suite ce qui va être lent à l'exécution ou pas.
|
|
Cette discussion est classée dans : dossier, fichiers, include, td, nf
Répondre à ce message
Sujets en rapport avec ce message
traiter plusieurs fichiers dans un dossier [ par mervat ]
bonjour, je veux faire les mêmes traitements pour chaque fichier d'un dossier, je vais donner un exemple pour que vous me comprenez plus: supposons qu
Problème avec environnement Dev-C++ [ par bovix ]
Bonsoir à tous, Me revoici avec une nouvelle question sur le C, plutot sur l'utilisation d'un environnement. Voilà je travaille avec le programme Dev-
Problème avec type double / paramètre [ par DmX0rZ ]
Bonjour,j'ai un problème qui me semble vraiment évident mais pour une raison inconnue, je ne comprens pas le comportement du programme... voilà, le pa
créer un vecteur de termes à partir d'un dossier de fichiers texte [ par mervat ]
bonjour, pour avoir une liste contenant les termes de tous les fichiers dans un dossier, j'ai écrit ce code. la liste que j'ai obtenue contient les te
traiter des dossiers et des fichiers [ par mervat ]
bonjour, je veux faire le meme traitement pour tous les fichiers d'un dossier, mais le dossier d'entrée a lui meme des dossiers de fichiers,j'ai réuss
Descriptif des fichiers INCLUDE [ par manu ]
Bonjour, je cherche qqun qui puisse me lister la liste des fichier h d'include et a quoi ils servent ?Tel que :// Fichiers à inclure#include // pour
[C/C++] - déclarations de fichiers .h [ par smashcfr ]
Hello j'essaie de me remettre au C (sur builder), et je commence simple, en faisant des progs console. Même si je fais un tout petit prog, je le fais
HELP creation de dossier [ par asnow ]
SALUT A TOUS Je voudrais savoir comment ouvrir est integrer des fichiers dans un dossier en C sous dev-C++.Avec cette commande CreateDirectory(nom,NUL
MingW32 [ par ac117 ]
Salut,Y a t-il un installeur de MingW32 dans la salle ?Parce que à premiere vue, c'est facile. L'exemple "hello world" marche bien, mais dés qu'il s'a
Include "je_comprend_pas_grand_chose.h" [ par neodelphi ]
Bonjour tout le monde... C'est la première fois que je post un message ici, arf g le trac lol Bon je viend de me mettre au C++ pour me prog un jeu en
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|