Recherche de fichier visual c++6.0

Contenu du snippet

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.

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.