begin process at 2012 05 28 22:07:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Fichier & Disque

 > 

Comptage de fichiers + poids du dossier avec fonction FindFirst et Récursivité


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

Membre Club Administrateur CodeS-SourceS
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

Membre Club Administrateur CodeS-SourceS
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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales