Rechercher un type de fichier dans toute une arborescence

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 323 fois - Téléchargée 30 fois

Contenu du snippet

c'est une fonction recursive qui parcours le répertoire et TOUS les sous-repertoires et stock tous les fichiers d'un meme type

mon code parcours une arborescence COMPLETE a partir d'un répertoire designé puis il recherche et ecrit dans un fichier ce qu'il a trouvé.
cet exemple est en rapport avec mon projet mais il est possible de modifier le type de fichier (ex:".exe", "*.txt"...) et ce que le fichier doit ecrire

PS: c'est une appli MFCAppWizard (cf: AfxMessageBox...)

Source / Exemple :


int CBatch::Cherch_Fic_Rep(CString rep, CString nom)
{
    rep = rep + "\\";
   CString sous_repertoire = "";
   CString fichier = "";
   FILE * file;

    // attribut d'ecriture en "a" car on ecrit plusieurs fois dans le fichier (à la suite)
    file = fopen(nom,"a");

   HANDLE hfind; 
   WIN32_FIND_DATA wfd; 

   hfind = FindFirstFile (rep + "*.*", &wfd );

   if ( hfind != INVALID_HANDLE_VALUE )
   {
       do
       {
                // vérifie que ce n'est pas le répertoire racine
	if( wfd.cFileName[0] != '.')
	{
	    // vérifie si c'est un répertoire ou non
	    if ( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) 
	    {
	         // répertoire
	        sous_repertoire  = rep + wfd.cFileName;
	        Cherch_Fic_Rep(sous_repertoire, nom);	
	    }
	    else 
	    {
	        // fichier
	        fichier = "CALL " + rep + wfd.cFileName;
	        // recherche de "." et positionnement dessus
	       fichier.Find(".");
	       // renvoi l'extension des fichiers
	       CString  ext = fichier.Right(3);
	       // ecriture uniquement si ext = ".bat"
	       if (ext == "bat")
	       {
		fichier += "\n";
		if (file != NULL)	fprintf (file,"%s",fichier);
		else AfxMessageBox("Impossible d'ecrire le fichier");
	       }
	       else continue;
	    }
                 }
        }
        // suite de la recherche
        while(FindNextFile( hfind, &wfd));
        // recherche terminé
        FindClose(hfind);
        fclose(file);
    }
return 0;
}

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
lundi 6 octobre 2008
Statut
Membre
Dernière intervention
2 novembre 2009

petite précision je suis sur bcb6
Messages postés
2
Date d'inscription
lundi 6 octobre 2008
Statut
Membre
Dernière intervention
2 novembre 2009

Salut,
je suis tomber sur ce code qui m'intéresse mais j'ai un petit problème:
je ne peut pas passer de cstring en paramètre.
est-ce que quelqu'un aurait une idée?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
Devcpp compile parfaitement un prog à base d'API Windows, il n'y a qu'à virer les CString inutiles et nuisibles.
Quand on cherche ".txt" en extension, on doit vérifier ces 4 caractères de fin et non 3, un fichier n'a pas obligatoirement une extension et son nom pourrait finir par "txt".

CString ext = fichier.Right(3);
Une alloc mémoire super utile...
Messages postés
2448
Date d'inscription
samedi 21 février 2004
Statut
Modérateur
Dernière intervention
29 janvier 2010
12
lol c'est vraiment pour ca que je n'ai jamais pu vraiment me mettre au c++ il y a meme pas une harmonisation au niveau des lib , et des compilos lol
Messages postés
138
Date d'inscription
vendredi 10 janvier 2003
Statut
Membre
Dernière intervention
27 janvier 2009

je compile sous vc++.
mais peut importe le complilo, c'est du c++ standard (avec MFC pour les CString)
Afficher les 11 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.