Oppure

Loading
05/04/08 16:16
WARRIOR
Ciao Ragazzi!
Sto implementando una soluzione ricorsiva per attraversare tutto l'hard disk con le API.
Qualcuno che ha già esperienza con queste due funzioni (FindFirstFile(), FindNextFile()), può consigliarmi qualcosa?

void cerca(const char *p) {
      string n;
      WIN32_FIND_DATA FindFileData; 
      HANDLE hFind; 
      vector <string> v;
      
      hFind = FindFirstFile(p,&FindFileData);  
      
      if (INVALID_HANDLE_VALUE != hFind )
      MessageBox(0,"Handle recuperato","handle",0);
      else 
      MessageBox(0,"Handle non recuperato","handle",0);  
           
       while(FindNextFile(hFind,&FindFileData)) {
       n=(string)p+"\"+(string)FindFileData.cFileName;
       if(FindFileData.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY) v.push_back(n); 
       else { cout << "nome: " << FindFileData.cFileName; system("pause"); }
       
       }
       
       for(int i=0; i<v.size(); i++) {
               cerca(v[i].c_str());
       }  
FindClose (hFind); 
return;
}


Anche senza funzione ricorsiva, provando la funzione FindFirstFile e FindNextFile in sequenza, lo script non va.
Dopo aver preso l'handle al primo file non passa a quello dopo e quest'ultimo esiste. 8-|

Grazie
aaa
07/04/08 10:24
gantonio
Ma tu come chiami la funzione cerca?

aaa
07/04/08 19:28
WARRIOR
Beh, naturalmente dal Main() passandoci un percorso valido. (quest'ultimo risulta corretto).
aaa
11/04/08 9:16
gantonio
Abbi pazienza ... cerco di darti una mano ... ho capito che chiami la funzione nel main ...

Mi fai vedere il codice del main in cui chiami la funzione ... ?
aaa
13/04/08 8:46
WARRIOR
main() {
string Path("C:");
cerca(Path.c_str());
return 0;       
}


Questo è il codice del main().
Non penso ci siano errori, anche perché è tutto molto semplice e lineare, tuttavia si ostina a non funzionare.
Grazie per la risposta, fammi sapere :k:.
aaa
13/04/08 9:00
gantonio
Postato originariamente da WARRIOR:
Non penso ci siano errori

... e invece uno c'e' ... ecco perche' ti chiedevo il main ... Deve essere

string Path("C:\*.*";);

A parte questo, ti accorgerai che anche nella funzione cerca ci sono errori (di tipo logico) ... ma lascio a te il piacere di scoprirli e correggerli ...
Ultima modifica effettuata da gantonio 13/04/08 9:01
aaa
14/04/08 18:16
WARRIOR
Grazie per la risposta.
Mi spieghi la semantica di quella stringa? (C:\*.*)...

Grazie ancora
:k:
aaa
14/04/08 21:45
gantonio
Cosa non capisci ...?

E' il classico

C:\*.*

del DOS ... non lo conosci?
aaa