[VC++]help avec la classe CFileFind?

help avec la classe CFileFind? [VC++] - C++ - Programmation

Marsh Posté le 02-01-2003 à 10:37:58    

Voila Je voudrais lister tous le contenu  mon disque dur avec repertoire et sous repertoire afin de les mettre dans un treeview
mais j'ai un peu de mal avec la fonction pour lister mon disque
pour l'instant j'ai fait ca:
CFileFind filefind;
CString path;
 
if(filefind.FindFile("c:\\*.*" ))
{
     if(filefind.FindNextFile())
     {
 path=filefind.GetRoot();
 m_CtlTree.InsertItem(path,0,0);
 
 while(1)
 {
   //on cherche le prochain fichier si il existe
   if(filefind.FindNextFile())
   {
  //on recupere son nom
  path=filefind.GetFilePath();
  //on l'affiche dans le tree view
  m_CtlTree.InsertItem(path,0,0);
           }
   else
  break;
 
        }
     }
}
 
 
Donc la je liste mon disque a partir de la racine avec les nom de repertoire et les fichiers
maintenant je voudrais faire la suite c a d listé les sous repertoire et leur contenu
 
Et la j'avoue que je bloque un peu
de l'aide serait le bienvenu
 
 

Reply

Marsh Posté le 02-01-2003 à 10:37:58   

Reply

Marsh Posté le 02-01-2003 à 12:35:15    

Simple lorque tu trouve un fichier teste si c un fichier ou un folder (File.IsFolder je crois), si c un folder, tu relance ta fonction de listage en partant de ce folder. Une fonction ecursive koi ...
 

Code :
  1. void recursiveFileFind( CString root )
  2. {
  3. CFileFind filefind;
  4. CString path;
  5. path.format("%s\\*.*", root );
  6. if(filefind.FindFile(path)
  7. {
  8.     if(filefind.FindNextFile())
  9.     {
  10.       path=filefind.GetRoot();
  11.       m_CtlTree.InsertItem(path,0,0);
  12.      while(filefind.FindNextFile())
  13.      {
  14.       //on cherche le prochain fichier si il existe  
  15.       //on recupere son nom  
  16.    
  17.      path=filefind.GetFilePath();
  18.      //on l'affiche dans le tree view  
  19.      m_CtlTree.InsertItem(path,0,0);
  20.     // si c un directory, on repart.
  21.     if( filefind.isDirectory() )
  22.     {
  23.        CString newroot;
  24.        newroot = root + path;
  25.        recursiveFileFind( newroot );
  26.     }
  27.    }
  28. }
  29. }

Reply

Marsh Posté le 02-01-2003 à 13:19:46    

merci
j'ai tester ca marche mieux
seul truc c que ca ne va pas parcourir tous les sous repertoire
exemple dans windows tu as le repertoire options qui lui meme contient le repertoire cabs
 
en faite c une question de nivo de profondeur
je v arranger ca je pense

Reply

Marsh Posté le 02-01-2003 à 13:51:49    

euh si desole ...
le fait de rappeler la fonction avec une nouvelle racine relance le truc ...
Parcontre oui, il fo peut etre changer les param du insert ds le treeview pour afficher l'arborescence proprement.

Reply

Marsh Posté le 02-01-2003 à 13:54:28    

ba ecoute je te remercie de ton aide encore une fois
mais je viens de reteste et la fonction va dans un repertoire puis un sous rep et c tout elle ne va pas plus loin  
enfin c ce que j'ai constater

Reply

Marsh Posté le 02-01-2003 à 14:01:12    

bizarre theoriquement ... ca devrait marcher !!
t'as bien verifier qu'y avait + d'un sousrep ...

Reply

Marsh Posté le 02-01-2003 à 14:05:22    

en faite je viens de tester avec des messagesbox
et le truc c que dans newroot tu as par exemple:      
mesdocumentC:\mesdocument  et c le C:\ qui ce met au millieu

Reply

Marsh Posté le 02-01-2003 à 14:06:46    

oui j'ai bien verifier
je n'ai qu'un niveau de profondeur(j'entend par la un repertoire puis un sous rep mais apres si y'a d'autres sous rep et bien il y va pas)

Reply

Marsh Posté le 02-01-2003 à 16:27:44    

ah OK c'est une erreur de ma part.
Faut pas faire  
 

Code :
  1. newroot = root .fileFinder.GetPath()


 
mais
 

Code :
  1. newroot = root .fileFinder.GetTitle()


 
juste recuperer le nom pas le chemin complet

Reply

Marsh Posté le 03-01-2003 à 09:44:39    

ah ok
mais a quel endroit tu modifie ca?
while(filefind.FindNextFile())  
    {  
     //on cherche le prochain fichier si il existe  
 
     //on recupere son nom  
     
   //[#c63800]tu change ici?
    path=filefind.GetFilePath();  
 
    //on l'affiche dans le tree view  
    m_CtlTree.InsertItem(path,0,0);  
 
   // si c un directory, on repart.  
 
   if( filefind.isDirectory() )  
   {  
      CString newroot;  
      //[#d42a00]ou bien ICI?
      newroot = root + path;  
      recursiveFileFind( newroot );  

Reply

Marsh Posté le 03-01-2003 à 09:44:39   

Reply

Marsh Posté le 03-01-2003 à 09:59:39    

Bizarrement dans root je n'ai rien
je viens de verifier avec un MessageBox.
donc quand je concatene et bien ca me concatene rien avec le nom  
ce qui fait que je n'ai pas le bon chemin
 :??:

Reply

Marsh Posté le 06-01-2003 à 09:11:44    

up

Reply

Marsh Posté le 08-01-2003 à 14:14:25    

[:_deckard_]  [:_deckard_]  [:_deckard_]  [:_deckard_]

Reply

Marsh Posté le 13-01-2003 à 13:02:00    

UP

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed