Newsgroup: it.comp.programmare
Titolo: Funzione ricorsiva in C

Ciao a tutti.
Ho scritto un funzione in C per mezzo della quale vorrei esplorare
tutto l'albero delle directory di un disco rigido.
Il punto č che la funzione č sě ricorsiva,ma,dopo aver rilevato le
prime directory del disco,comincia ad esaminare l aprima
sottodirectory della prima direcotry,poi la prima sottodir della prima
sottidir e  cosě via,ma le altre directory principali del disco non le
esamina.
Potreste dare un occhio al codice,per cortesia?
Ciao e grazie,
Alberto
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <direct.h>
#include <string.h>
#include <io.h>
#include <dir.h>
#include <process.h>
#include <sys\stat.h>
#include <dos.h>
#include <iostream.h>
char vettore[100][100];
char vettore2[100][100];
int cont;
int cont2;
int cont3;
int contatore_ingresso;
char destination[100];
int ptr;
void main(int argc,char *argv[]);
char *scandir(char *dirname);
int get_file_attrib(char *filename);
char *scandir(char *dirname)
{
   DIR *dir;
   struct dirent *ent;
   int attrib;
   if ((dir = opendir(dirname)) == NULL)
      {perror("impossibile aprire la directory");
       exit(1);}
   else
   cont = 0;
   while ((ent = readdir(dir)) != NULL)
   {
       attrib = get_file_attrib(ent->d_name);
       if (attrib & FA_DIREC)
       {
           ptr=strcmp(ent->d_name,".");
           if (ptr != 0) ptr=strcmp(ent->d_name,"..");
           if (ptr != 0)
           {   strcpy(vettore[cont],ent->d_name);
               cont++;
           }
       }
   }
   while(cont2<=cont)
      {printf("%s\n",vettore[cont2]);
       cont2++; }
   closedir(dir);
   cont2=0;
   while (cont2<cont)
       { strcpy(destination,dirname);
         strcat(destination,"\\");
         strcat(destination,vettore[cont2]);
         printf("%s\n",destination);
         strcpy(vettore2[cont2],destination);
         cont2++;}
   cont2=0;
    while (cont2<cont)
       { chdir(vettore2[cont2]);
         scandir(vettore2[cont2]);
         cont2++;}
return(destination);
}
int get_file_attrib(char *filename)
{
   return(_rtl_chmod(filename,0));
}
void main(int argc,char *argv[])
{
   if (argc != 2)
   {printf("uso: opendir dirname\n");
     exit(1);                           }
     chdir(argv[1]);
     scandir(argv[1]);
     exit(1);
}

Ho dato un occhiata veloce senza soffermarmi per niente e posso dirti che
per essere implementata ricorsivamente è troppo lunga...
Feci la stessa cosa anche io, ma me la cavai con una funzioncina al massimo
di 15 righe e senza un ciclo while...
Ti consiglio di rivedere la funzione e di usare findfirst e findnext.
Ciao
--------------------------------
Inviato via 
http://usenet.libero.it

Potreste dare un occhio al codice,per cortesia?
   E' poco chiaro, comunque:
   vettore, vettore2, cont, cont2 sono variabili globali: la prima
invocazione ricorsiva di scandir sovrascrive vettore, vettore2, ecc.,
impedendo all'invocazione precedente di continuare l'elaborazione al
rientro;
   probabilmente manca una chiamata a chdir("..") dopo l'invocazione
ricorsiva di scandir.
 
-- 
S.L.

Ok.
Grazie comunque,
Alberto

   
Ok,vedrò cosa riesco a fare...
Intanto grazie,e ciao,
Alberto