Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1372 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C/C++] Explorer un repertoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/C++] Explorer un repertoire

n°173976
bartleby
Posté le 09-07-2002 à 22:18:28  profilanswer
 

Bonjour a tous,
 
Je cherche a faire une operation sur tout les fichiers d'un certain type ( vxml) dans tout les fichiers present dans la sous arborescence d'un repertoire.
 
Bon, en gros mon seul probleme c'est d'arriver a parcourir les repertoires.
 
J'ai bien pensé a lancer mon programme avec l'argument '*', mais la liste que j'obtiens ne fais pas la difference entre les repertoires et les fichiers !!! Y a-t-il une solution pour avoir les fichiers dans un tableau et les repertoires dans un autre ?!
 
Merci d'avance :)

mood
Publicité
Posté le 09-07-2002 à 22:18:28  profilanswer
 

n°173980
*syl*
--> []
Posté le 09-07-2002 à 22:22:57  profilanswer
 

Va faire un tour du côté de findfirst & findnext, un ch'ti coup de récursion et l'tour est joué ;)

n°173987
bartleby
Posté le 09-07-2002 à 22:45:06  profilanswer
 

Wow, incroayble la rapidite de la reponse !!!
 
Bon, je file voir ceci ;)  
 
merci bcp, je sens que je vais dormir + que 3 heures cette nuit c'est chouette :D !!!

n°174024
bartleby
Posté le 10-07-2002 à 00:40:16  profilanswer
 

Bon, voila c'est 1h00 ca marche toujours pas, j'en suis a mon 3eme café, je sais toujours pas pourquoi ca marche pas....
 
#include <iostream.h>
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
 
void lister(LPCTSTR file);
 
void main()
{
    lister("*.*" );
}
 
void lister(LPCTSTR fichier)
{
 
    char *new_path="";
    WIN32_FIND_DATA wData;
    char nom[MAX_PATH];
    HANDLE listing;
    listing = FindFirstFile(fichier,    &wData);
     
    while((FindNextFile(listing, &wData)))
     {
       if(wData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY ){
 
       cout << "DIRECTORY : " << wData.cFileName<< "\n";
       new_path=wData.cFileName;
       strcat(new_path,"\\*" );
 
          lister(new_path);
       }
       else
       cout << "FILE : " << wData.cFileName<< "\n";
     }
}    
 
Si je le lance des la racine, il boucle sans fin ( il alterne entre la 1er directory et ".." j'ai beau tester avant de lancer ma recursivité si je la lance sur ".." il n'y a rien a faire....
 
Doit y avoir un truc qui m'echappe la......tiens c'est quoi ce petit mec tout vert qui sort d'une soucoupe ?!

n°174043
chrisbk
-
Posté le 10-07-2002 à 03:20:22  profilanswer
 

ben heuh, ca me semble normale, vu que dans un rep il y a tjs les rep "." et ".."
donc quand tu fais ta recursion fait gaffe a pas visiter ces reps
 
Ensuite, deux trucs:
 
1) pourquoi tu regarde pas le fichier retourné par findFirstFile ? tu attaque directmeent avec celui donné par findNextFile
 
2) perso je remplacerais  
if(wData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )
par
if( (wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )!=0)
 
ca peut t'eviter des blagues si ton rep a des attributs (genre archive)
 
 
 
 
 

n°174099
bartleby
Posté le 10-07-2002 à 09:27:06  profilanswer
 

Tous d'abord, merci a tous ceux qui ont repondu.
 
Pour mon probleme de la recursivite, j'ai bien essaye de mettre
 
if( new_patch != "..\*.*" )
lister(new_path);  
 
Pour eviter de "remonter" mon arborescence, le probleme c'est que ce test est toujours vrai.....meme en utilisant strcmp !
 
 
 
 
     

n°174101
bartleby
Posté le 10-07-2002 à 09:29:06  profilanswer
 

if(wData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )
 
if( (wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )!=0)
 
?! A, la je comprends pas la notation, le "&" c'est pas un "et" logique "&&" ?!

n°174291
chrisbk
-
Posté le 10-07-2002 à 13:46:53  profilanswer
 

bartleby a écrit a écrit :

Tous d'abord, merci a tous ceux qui ont repondu.
 
Pour mon probleme de la recursivite, j'ai bien essaye de mettre
 
if( new_patch != "..\*.*" )
lister(new_path);  
 
Pour eviter de "remonter" mon arborescence, le probleme c'est que ce test est toujours vrai.....meme en utilisant strcmp !
 
 
 
 
       




 
heuh attention !
 
deja il FAUT utiliser strcmp pour comparer des chaines de caracteres  
Ensuite strcmp te renvoie 0 si ls chaines sont identiques
 
 

n°174728
fabsk
Posté le 10-07-2002 à 23:43:12  profilanswer
 

bartleby a écrit a écrit :

if(wData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )
 
if( (wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )!=0)
 
?! A, la je comprends pas la notation, le "&" c'est pas un "et" logique "&&" ?!
 




 
J'imagine que "wData.dwFileAttributes" est une variable plein de flags. Du style:
00001010
si le 5ieme bit est l'attribut "directory", alors tu testes avec un "&":
  00001010 <- dwFileAttributes
& 00001000 <- FILE_ATTRIBUTE_DIRECTORY
-----------
  00001000
 
resultat: non nul, donc directory


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C/C++] Explorer un repertoire

 

Sujets relatifs
afficher toutes les images d'un répertoire ?[Delphi] TShellTreeView, comment forcer un répertoire ? (résolu)
permissions d'écriture pour la création d'un répertoireLa taille d'un répertoire sous Unix est elle toujours fixe?
Internet Explorer et CSS2 ...[MS-DOS]commande pour copier TOUT le contenu d'un repertoire
[VBA] -> tester l'existence de repertoireLister les fichiers d'un repertoire en Pascal !
[PHP] generer un log sur un repertoire protege en htaccess.[Java] copie de fichier et de repertoire
Plus de sujets relatifs à : [C/C++] Explorer un repertoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR