Algo de recherche recursif

Contenu du snippet

C'est un petit algorithme qui permet comme sont nom l'indique de faire une recherche recurcive dans un dossier donné à travers 3 fonctions.
On parcours ainsi tout les sous dossiers pour trouver les fichiers.

Source / Exemple :


//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Recherche.h"
using namespace std;
#include <filectrl.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        Recherche();
}
//---------------------------------------------------------------------------
void Recherche()
{
        AnsiString Dossier;
        if(SelectDirectory("Choisir le dossier source","",Dossier))
        {
              RechercheDossier(Dossier);
        }

}
//---------------------------------------------------------------------------
void RechercheFichier (AnsiString Dossier)
{
        AnsiString Filtre =  Dossier + "\\*.*";

        TSearchRec sr;
        int done;

        done = FindFirst(Filtre, faAnyFile, sr);
        while(!done)
        {
                //--- testes si l'extension est une image possible
                AnsiString Ext;
                int PosPoint = sr.Name.LastDelimiter(".");
                Ext = sr.Name.SubString(PosPoint+1,sr.Name.Length()-PosPoint).LowerCase();
                if(Ext=="bmp" || Ext=="jpg" || Ext=="jpeg" || Ext=="wmf" || Ext=="emf")
                {
                        AnsiString Fichier = Dossier + "\\"+sr.Name;
                        Form1->Memo2->Lines->Add(Fichier);

                }
                done = FindNext(sr);
        }
}
//---------------------------------------------------------------------------

void RechercheDossier (AnsiString Dossier)
{

        AnsiString Filtre =  Dossier + "\\*.*";

        TSearchRec sr;
        int done;
        done = FindFirst(Filtre, faDirectory, sr);
        while (!done)
        {

                AnsiString Ext = ExtractFileExt(sr.Name);
                if (Ext == "")
                {
                        Form1->Memo1->Lines->Add(sr.Name);
                        RechercheDossier(Dossier+ "\\"+sr.Name);
                }
         
                done = FindNext(sr);
        }
        RechercheFichier(Dossier);
}
//---------------------------------------------------------------------------

A voir également

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.

Du même auteur (shadow52)