reponse à une question du forum...
une recherche de fichier dans un répertoire donné...
Rq: cette fonction était récursive à l'origine mais à été simplifiée pour les besoins...
pour la question,
spécifie le répertoire et met la liste en param (adresse!) (listeFic était dans ma classe...) tu peux utiliser un BLBString extrait des BListeIndir déjà Publiées sur ce site...
le critère sera "*.dat"
et le chemin sera .........\\data\
Magicalement,
Nono.
Source / Exemple :
void CFichier::exploreRepertoire(BString critere, bool progression)
{
/// ------------------------------------------------------------------------------------------------
/// ---------------- CFichier::exploreRepertoire(BString critere ,bool progression) ----------------
/// ------------------------------------------------------------------------------------------------
/// ----- Objectif : explore le répertoire en remplissant ses listes
/// ----- Auteur(s) : Bruno CELLE 11/01/04
/// ----- PreCond : /
/// ----- PostCond : /
/// ----- Etat : 1 (-1<0<1<2)
/// ------------------------------------------------------------------------------------------------
/// ----- BString critere(par défaut : '"*.* " ') : critère de recherche...
/// ----- bool progression(par défaut : 'false') : affichage de la progression? (le trtt est parfois lent)
/// ------------------------------------------------------------------------------------------------
/// ----- Var Utilisées de la classe (7) : chemin ,listeFic ,listeRep ,nomLong ,rechArborescente ,repertoire ,tri
/// ----- Var Muettes (cf.partie préc) (2) : critere ,progression
/// ----- Var Internes à la fonction (6) : file ,find ,nom ,pathname ,plomp ,rech
/// ----- Var Utilisées par adresse (1) : file
/// ----- Var In (7) : chemin ,critere ,nomLong ,progression ,rechArborescente ,repertoire ,tri
/// ----- Var In Globales (1) : e
/// ----- Var In Globales Constantes (2) : FILE_ATTRIBUTE_DIRECTORY ,INVALID_HANDLE_VALUE
/// ----- Var Out (2) : listeFic ,listeRep
if(!repertoire || nomLong=="") //sécu
return;
WIN32_FIND_DATA file;
HANDLE find=NULL;
BString rech=chemin,pathname,plomp,nom;
rech+=nomLong;
/// algo : Ajoute une barre oblique(\\) à la fin de la chaine si manquante
if(!rech.endWith('\\\\'))
rech+='\\\\';
rech+=critere;
/// algo : recherche
find=FindFirstFile(rech, &file);
if(find != INVALID_HANDLE_VALUE)
{
if(progression)
printf("+");
/// algo : POUR TOUT fichier trouvé
do
{
if(progression)
{
//la progression pourrait être montrée par une hélice : les car de ('/-\\|' successivement affiché au même au emplacement)
printf(".");
fflush(stdout);
}
nom=file.cFileName;
/// algo : SI un pas un répertoire
if(!(file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
/// algo : {un fichier simple}
/// nota : il peut s'agir d'un raccourcis... (cas non traité)
plomp=chemin;
plomp+=nomLong;
plomp+='\\\\';
plomp+=nom;
try
{
CFichier f(plomp,false,tri);
listeFic+=f;
}
catch(BException& e)
{
if(e.which()!=1001) //err ouverture...
throw(e);
}
}
}
while(FindNextFile(find, &file));
FindClose(find);
}
}
Conclusion :
PS: n'oubliez pas de donner une note aux sources que vous utilisez et n'hésitez pas à mettre un ptt mot.
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.