Rechercher un type de fichier dans toute une arborescence

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 757 fois - Téléchargée 32 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
metalange Messages postés 2 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 2 novembre 2009
2 nov. 2009 à 14:25
petite précision je suis sur bcb6
metalange Messages postés 2 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 2 novembre 2009
2 nov. 2009 à 12:25
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?
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 avril 2006 à 00:14
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...
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
26 avril 2006 à 23:20
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
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009
26 avril 2006 à 23:18
je compile sous vc++.
mais peut importe le complilo, c'est du c++ standard (avec MFC pour les CString)

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.