Buongiorno a tutti! Allora andiamo subito al sodo ragazzi: ho questo codice
Da come si vede la mia idea è quella di cercare una directory o un file tramite questa funzione che prende due parametri: path[], che sarebbe il nome della directory da dove si comincia a ricercare, alla prima chiamata path sarà una stringa del tipo "C:\" ovvero la radice, e che poi diventerà via via del tipo C:\dir\dir\..., e str[] che è il nome della directory o del file da ricercare. Il ciclo for all'inizio confronta ad ogni chiamata le due stringhe per vedere se in path[] c'è una sezione uguale a str[] e il ciclo while gestisce la costruzione delle stringhe man mano che si avanza nelle directory e chiama ricorsivamente la funzione "Gestione_dir".codice:int Gestione_Dir(char path[],char str[]) { DIR *dip; struct dirent *dit; char appoggio[MAXLINE]; int x=0,i; chdir("D:\\"); for(i=0; path[i]!='\0'; i++) { if(path[i]=='\\') { char app[MAXLINE]; strcpy(app,&path[i+1]); if(strcmp(app,str)==0) { printf("\n%s\n",path); x=1; return 1; } } } if((dip=opendir(path))==NULL) { return 0; } while((dit=readdir(dip))!=NULL && x!=1) { strcpy(appoggio,dit->d_name); if((strcmp (appoggio, "..")) != 0 && (strcmp(appoggio, ".") != 0)) { char str_1[MAXLINE]; snprintf(str_1,MAXLINE,"%s\\%s",path,appoggio); //printf("\n%s\n\n",str_1); x=Gestione_Dir(str_1,str); } } closedir(dip); return x; }
Secondo voi c'è un modo per migliorare la ricerca e ammazzare O(n)? Dato che questo è un metodo brute force bello e buono che può risultare lungo se non si trova l'elemento in questione. Spero risponderete in tanti al post e grazie in anticipo![]()


Rispondi quotando