Arpeda
08-01-2003, 12:25
ciao,
stavo facendo un programmino che a partire da una dir deve stampare tutte le sotto directory.
stavo pensando di utilizzare la ricorsione (visita in profonditā), purtroppo mi trovo di fronte i soliti problemi di implementazione e sto in questo stato :muro: :D.
per piccole dir il programmino non sembra avere problemi, ma se gli passo dir come / o /usr sfarfalla (mi stampa nomi di file quando dovrebbe stampare solo le dir)
Posto qui il programmino in allegato
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h> // questo ci va messo per la compilazione
#include <string.h>
void scan(char * dir, int l) {
struct dirent **contenuto__;
int n, i;
struct stat st;
n = scandir(dir, &contenuto__, 0, alphasort); //scandisce la dir DIR
if (n < 0)
printf("ERRORE nella lettura della dir %s\n", dir);
else {
for (i=0;i<n;i++) {
stat(contenuto__[i]->d_name, &st);
if ((S_ISDIR(st.st_mode)!=0) &&
!(strcmp(contenuto__[i]->d_name,".")==0) &&
!(strcmp(contenuto__[i]->d_name,"cwd")==0) &&
!(strcmp(contenuto__[i]->d_name,"..")==0)
) {
//if (filter(contenuto__[i]->d_name))
printf("%d, %s\n", l, contenuto__[i]->d_name);
if (chdir(contenuto__[i]->d_name)==0) {
scan(".", l+1);
chdir("..");
}
}
free(contenuto__[i]);
}
free(contenuto__);
}
}
int main() {
char *name_dir;
printf("inserisci il path assoluto della dir che vuoi browserare: ");
scanf("%as",&name_dir); //as non č POSIX
printf("\n");
if (chdir(name_dir) < 0) { //si posiziona nella dir scelta dall'utente
printf("La dir immessa non esiste\n");
exit(1);
}
scan(".", 0);
exit(1);
}
Ciao
Arpeda
stavo facendo un programmino che a partire da una dir deve stampare tutte le sotto directory.
stavo pensando di utilizzare la ricorsione (visita in profonditā), purtroppo mi trovo di fronte i soliti problemi di implementazione e sto in questo stato :muro: :D.
per piccole dir il programmino non sembra avere problemi, ma se gli passo dir come / o /usr sfarfalla (mi stampa nomi di file quando dovrebbe stampare solo le dir)
Posto qui il programmino in allegato
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h> // questo ci va messo per la compilazione
#include <string.h>
void scan(char * dir, int l) {
struct dirent **contenuto__;
int n, i;
struct stat st;
n = scandir(dir, &contenuto__, 0, alphasort); //scandisce la dir DIR
if (n < 0)
printf("ERRORE nella lettura della dir %s\n", dir);
else {
for (i=0;i<n;i++) {
stat(contenuto__[i]->d_name, &st);
if ((S_ISDIR(st.st_mode)!=0) &&
!(strcmp(contenuto__[i]->d_name,".")==0) &&
!(strcmp(contenuto__[i]->d_name,"cwd")==0) &&
!(strcmp(contenuto__[i]->d_name,"..")==0)
) {
//if (filter(contenuto__[i]->d_name))
printf("%d, %s\n", l, contenuto__[i]->d_name);
if (chdir(contenuto__[i]->d_name)==0) {
scan(".", l+1);
chdir("..");
}
}
free(contenuto__[i]);
}
free(contenuto__);
}
}
int main() {
char *name_dir;
printf("inserisci il path assoluto della dir che vuoi browserare: ");
scanf("%as",&name_dir); //as non č POSIX
printf("\n");
if (chdir(name_dir) < 0) { //si posiziona nella dir scelta dall'utente
printf("La dir immessa non esiste\n");
exit(1);
}
scan(".", 0);
exit(1);
}
Ciao
Arpeda