begin process at 2010 02 10 10:56:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > SCANNER DE DISQUES (RECURSIF)

SCANNER DE DISQUES (RECURSIF)


 Information sur la source

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers / Disque Classé sous :scanner, recherche, dossier, fichier, récursif Niveau :Débutant Date de création :02/05/2006 Date de mise à jour :30/08/2006 13:12:02 Vu :8 363

Auteur : yoyo269

Ecrire un message privé
Site perso
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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

  • /*====================== 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);
  • }
/*====================== 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);
}



 Historique

03 mai 2006 09:09:28 :
-Utilisation de pointeur; -Utilisation du do{}while{}.
26 août 2006 20:41:00 :
-Utilisation de strcpy().
30 août 2006 13:12:02 :
Ajout d'une accolade manquante.

 Sources du même auteur

Source avec Zip Source avec une capture YOYODOWN - TÉLÉCHARGEMENT HTTP [DEV-C++ 4.9.9.2]
Source avec Zip Source avec une capture YOYOMD5 - CALCUL ET AFFICHAGE DE LA CLEF MD5 D'UN FICHIER
Source avec Zip Source avec une capture TRACÉ DE COURBES À PARTIR D'UN FICHIER TEXTE (GDI)
Source avec Zip Source avec une capture YOYOCUT 2 - DÉCOUPE FICHIER [VISUAL C++ 2005 EXPRESS]
Source avec Zip DIFFUSION D'UN WAVE PAR RTP !!! [DEV-C++]

 Sources de la même categorie

Source avec Zip Source avec une capture ID3 TAG COVER ALBUM IMAGE par nanonavich
FILEREADER par FrancoisGauthier
Source avec Zip CLASSE AVANCÉE DE LOG, THREAD SAFE ET DIVERSES SURCHARGES par sboli
Source avec Zip Source avec une capture Source .NET (Dotnet) INFILESEEKER par swonder
Source avec Zip Source avec une capture USB DETECTION par abandonware

 Sources en rapport avec celle ci

LISTER LES FICHIERS D'UN REPERTOIRE + FILTRES par yvesyves
Source avec Zip PROTEGER UN DOSSIER ET LES FICHIER A L INTERIEUR par f_l_a_s_h_b_a_c_k
Source avec Zip DICTIONNER RECHERCHE GTK par jabirmed
Source avec Zip NENGINE ( MOTEUR DE RECHERCHE POUR FICHIER ) (UPDATE) par NitRic
Source avec Zip FINDFILE(UPDATE) par NitRic

Commentaires et avis

Commentaire de BruNews le 02/05/2006 17:08:35 administrateur CS

if(strcmp(WFD.cFileName, ".") && strcmp(WFD.cFileName, ".."))
if(WFD.cFileName[0] != '.') autrement plus efficace et bien moins gros en code.

Commentaire de yoyo269 le 02/05/2006 18:20:25

Oui c'est vrai mais j'ai par endroit sur un de mes disques durs, des dossiers cachés de linux et qui commencent donc par un point.
Mais c'est vrai que j'y avais même pas pensé en tous cas merci.

YOYO, @+.

Commentaire de laurent1024 le 02/05/2006 19:03:46

par ailleurs if(strcmp(WFD.cFileName, ".") && strcmp(WFD.cFileName, "..")) ca me semble un peu bizarre c'est pas plutot :if(strcmp(WFD.cFileName, ".") || strcmp(WFD.cFileName, ".."))

a++;

Commentaire de dPompei2 le 02/05/2006 20:42:00

Laurent1024:
non ce que tu dis est faux, puisque strcmp retourne la différence entre str1 et str2. Donc en cas d'égalité, strcmp retourne 0
ça m'arrive aussi des fois de me tromper avec strcmp, c'est un peu casse c* mais c'est la vie ;)

Commentaire de vecchio56 le 02/05/2006 20:49:10 administrateur CS

Même si on a des dossiers commencant par '.', on peut alléger ton code:
char* p = WFD.cFileName; // p est moins long à écrire
if(!(p[0] == '.' && !p[1]) && !(p[0] == '.' && p[1] == '.' && !p[2]))
{
...
}

Je pense que ca peut encore se simplifier, mais ca risque de devinir illisible

Commentaire de yoyo269 le 02/05/2006 23:24:06

Ok merci vecchio !
Je vais changer ça.

YOYO, @+.

Commentaire de bayeto le 03/05/2006 03:05:17

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

Commentaire de yoyo269 le 03/05/2006 09:12:17

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, @+.

Commentaire de BruNews le 03/05/2006 10:45:02 administrateur CS

*chaine = 0; fait 1 cycle, imbattable

Commentaire de yoyo269 le 03/05/2006 11:00:06

Ok merci BruNews !

YOYO, @+.

Commentaire de steph12358 le 05/07/2007 15:07:33

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);

}

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

scanner un dossier??turboC++ [ par idk ] J'aimerai scanner un dossier, et mettre les noms de fichier en string!ex: dans un dossier, il y a des fichier wad, tar.wad, tir.wadEt je veux, sous fo recherche un dossier par date de creation [ par mickaaaael ] Bonjour,J'aimerai trouver un logiciel qui me permettrai de récupérer le dernier fichier crée dans un dossier X pour le mettre dans un dossier Y et qu' Fichier qui affiche dans la console tout les fichiers et dossier du lecteur C [ par kiitos ] Comment faire un fichier qui affiche dans la console tout les fichiers et dossier du lecteur C ? Copie de fichiers et dossiers [ par abdelwaheb_ammar ] bonjour bonjour je veux faire un projet de gestion de dossier et dossier sur C++mais je ne trouve pas la commandes qui me permet de copier un dossier Dossier HLP et fichier .hm [ par yann_lo_san ] Salut à vous,j'ai commencé un projet MFC en .net1 (vs2003) qui est assez avancé, j'avais choisi au départ une prise en charge des fichiers d'aides (hl recherche dans un fichier [ par brainniac1 ] Salut, je voudrais savoir comment chercher un mot dans un fichier?Merci, d'avance !!! probleme de recherche [ par rachidotec ] bjr, jèai un probleme de recherche des fichiers selon la date de création. le problem est comme suite: -j'ai crée une application qui regroupe des fic ecriture d'un txt dans le même dossier [ par MiharbiDoNo ] j'essai d'ecrire un fichier txt a l'aide de [code=cpp]ofstream myfile; myfile.open ("exemple.txt");[/code] le probleme c'est l'emplacement du fichier extraction text [ par fatenIM ] salut à tous Mon projet consiste à écrire un programme en langage c permettant d'offrir à l'utilisateur la possibilité de faire une recherche en utili Vérifier la présence d'un fichier [ par gilds5 ] Bonjour  à tousJ'ai trouvé quelques réponses pour le même genre de sujet, mais comme je débute à mort, je n'ai rien trouvé que puisse comprendre...Don


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,170 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales