come faccio in C a leggere il contenuto di una directory?
e farmi stampare a video tutti file che la cartella contiene??
Grazie
come faccio in C a leggere il contenuto di una directory?
e farmi stampare a video tutti file che la cartella contiene??
Grazie
sistema operativo?
Sistema Unix Like dunque.
Allora, tieni presente che non sono un guru in POSIX, comunque:
Hai bisogno di un descrittore di directory e una struttura che contenga i dati nella directory.
Nel seguente codice ho tralasciato tutto il tralasciabile, vedi il man per spiegazioni dettagliate.
codice:struct dirent * Dirent; DIR * dir; struct stat s; dir = opendir(m_base); while((Dirent = readdir(dir)) != NULL) { printf(Dirent->d_name); stat(Dirent->d_name, &s); printf(Dirent->d_name); if (S_ISDIR(s.st_mode)) /*e' una directory, puoi ripartire ricorsivamente da qui se necessario*/ }
dimenticavo....
closedir(dir);
non riesco a farlo andare
ho provato uno programma semplice:
#include <stdio.h>
#include <string.h>
#include <fontl.h>
#include <sys/tapes.h>
#include <sys/stat.h>
int main()
{
struct dirent * Dirent;
DIR * dir;
struct stat s;
dir = opendir(m_base);
while((Dirent = readdir(dir)) != NULL)
{
printf(Dirent->d_name);
stat(Dirent->d_name, &s);
printf(Dirent->d_name);
if (S_ISDIR(s.st_mode))
/*e' una directory, puoi ripartire
* ricorsivamente da qui se necessario*/
}
closedir(dir);
return 0;
}
quando compilo ecco gli errori:
lettura_cartella.c:3:19: fontl.h: No such file or directory
lettura_cartella.c:4:23: sys/tapes.h: No such file or directory
mentre se li commento:
#include <stdio.h>
#include <string.h>
//#include <fontl.h>
//#include <sys/tapes.h>
#include <sys/stat.h>
int main()
{
struct dirent * Dirent;
DIR * dir;
struct stat s;
dir = opendir(m_base);
while((Dirent = readdir(dir)) != NULL)
{
printf(Dirent->d_name);
stat(Dirent->d_name, &s);
printf(Dirent->d_name);
if (S_ISDIR(s.st_mode))
/*e' una directory, puoi ripartire
* ricorsivamente da qui se necessario*/
}
closedir(dir);
return 0;
}
ecco gli errori:
ettura_cartella.c: In function `main':
lettura_cartella.c:11: `DIR' undeclared (first use in this function)
lettura_cartella.c:11: (Each undeclared identifier is reported only once
lettura_cartella.c:11: for each function it appears in.)
lettura_cartella.c:11: `dir' undeclared (first use in this function)
lettura_cartella.c:12: parse error before `struct'
lettura_cartella.c:14: `m_base' undeclared (first use in this function)
lettura_cartella.c:16: warning: assignment makes pointer from integer without a cast
lettura_cartella.c:18: dereferencing pointer to incomplete type
lettura_cartella.c:19: dereferencing pointer to incomplete type
lettura_cartella.c:19: `s' undeclared (first use in this function)
lettura_cartella.c:20: dereferencing pointer to incomplete type
lettura_cartella.c:25: parse error before `}'
sai dirmi qualcosa??????
:sgrat:
fontl.h credo sia in realta fcntl.h
prova a includere questi
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>
comunque ti devi leggere il man, il pezzo di codice che ti ho scritto non funziona mica, e' solo un template che puoi guardare a titolo informativo ..., nel man trovi i dettagli per tutte le funzioni che ho inserito, inoltre ti spiega anche i codici di errore che queste restituiscono.
m_base e' una variabile che contiene un percorso tipo
m_base = "/sbin";