Scanner de disques (recursif)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 597 fois - Téléchargée 28 fois

Contenu du snippet

Permet d'effectuer une recherche à partir d'un dossier donné (ex : "C:\\Program Files\\").
Voir le code pour savoir où placer du code pour traiter les informations d'un dossier.

A vos claviers pour vos remarques éventuelles.

Source / Exemple :


/*====================== Scrute tous les sous-dossiers à partir de "Dossier" ====================*/
void ScruterSousDossiers(char * Dossier)
{
	HANDLE hRecherche;
	WIN32_FIND_DATA WFD;
	char * Nom = WFD.cFileName;
	char DossFiltre[1024], DossRech[1024];
//-----//
	strcpy(DossFiltre, Dossier);
	strcat(DossFiltre, "*.*");
	hRecherche = FindFirstFile(DossFiltre, &WFD);
	if(hRecherche == INVALID_HANDLE_VALUE)
	{
		FindClose(hRecherche);
		return;
	}
	do
	{
		if((WFD.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
		{
			if(!(Nom[0] == '.' && !Nom[1]) && !(Nom[0] == '.' && Nom[1] == '.' && !Nom[2]))
			{
				strcpy(DossRech, Dossier);
				strcat(DossRech, Nom);
				strcat(DossRech, "\\");
				
				// PLACER LE CODE DE TRAITEMENT ICI, POUR LE DOSSIER "DossRech".
				
				ScruterSousDossiers(DossRech);
			}
		}
	}
	while(FindNextFile(hRecherche,&WFD));
	FindClose(hRecherche);
}

A voir également

Ajouter un commentaire Commentaires
Messages postés
150
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
10 décembre 2009

Salut à tous

Bon, je sais, ça fait un peu déterrage :0)
mais, je suis tombé sur le code de yoyo qui m'a bien tiré d'affaire.

La fonction originale a été un petit peu modifiée pour en faire une fonction de copie récursive.

code:

void TFormPrincipal::CopieRecursiveFichiers(char *Dossier, char * pdossiercible)
{

/*d'après un code de yoyo269 code original http://www.cppfrance.com/codes/SCANNER-DISQUES-RECURSIF_37366.aspx
*/


HANDLE hRecherche;
WIN32_FIND_DATA WFD;
char * Nom = WFD.cFileName;
char DossFiltre[1024], DossRech[1024], DossCible[1024];
char source[1024], cible[1024];

strcpy(DossFiltre, Dossier);
strcat(DossFiltre, "\");
strcat(DossFiltre, "*.*");
hRecherche = FindFirstFile(DossFiltre, &WFD);

if(hRecherche == INVALID_HANDLE_VALUE)
{
FindClose(hRecherche);
return;
}
do
{
if((WFD.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
{
if(strcmp(WFD.cFileName, ".") && strcmp(WFD.cFileName, ".."))
{
strcpy(DossRech, Dossier);
strcat(DossRech, "\");
strcat(DossRech, Nom);

strcpy(DossCible, pdossiercible);
strcat(DossCible, "\");
strcat(DossCible, Nom);

//Application->MessageBox(DossCible, "rep CIBLE", MB_OK);

// PLACER LE CODE DE TRAITEMENT ICI, POUR LE DOSSIER "DossRech".
if (! DirectoryExists(DossCible) )
{
mkdir(DossCible);
}
CopieRecursiveFichiers(DossRech, DossCible);
}
}
else
{
sprintf(source, "%s\\%s", Dossier, WFD.cFileName);
sprintf(cible, "%s\\%s", pdossiercible, WFD.cFileName);

sprintf(msg, "CopyFile(%s, %s, false)", source, cible);
CopyFile(source, cible, false);
}
}

while (FindNextFile(hRecherche,&WFD));

FindClose(hRecherche);

}
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Ok merci BruNews !

YOYO, @+.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
*chaine = 0; fait 1 cycle, imbattable
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Ca y est j'ai corrigé le code. (merci vecchio et bayeto)
Qu'est-ce qui est le plus rapide pour remplacer le memset ?
*chaine = 0 ou utiliser directement le strcpy (ou autre chose) ?

YOYO, @+.
Messages postés
224
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
18 octobre 2010

Une boucle do-while ne serait-elle pas plus compacte que le if + while ?
et pour le memset? mettre un *chaine = 0; ou carrement un strcpy
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.