Buongiorno a tutti! Allora andiamo subito al sodo ragazzi: ho questo codice
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;
}
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".
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