2010-10-24 8 views
5

Ho percorso di una cartella ad esempioelenco di file Ottenere in una cartella utilizzando C

/myfolder

o in Windows:

C: \ myfolder

e voglio ottenere un elenco di tutti i file in quella cartella. Come posso farlo in C?

È diverso in C++ o C99?

Come posso ottenere un elenco delle relative cartelle?

Qualsiasi aiuto è apprezzato.

+2

Questa domanda non ha nulla a che fare con C o C++ ma con il sistema operativo che si sta utilizzando. Per favore, sii più preciso –

+0

@Jens Uh? Dove vedi l'ambiguità? Inoltre ha molto a che fare con C o C++. –

+3

C come linguaggio ha I/O su file, ma non conosce nemmeno il concetto di directory. Le directory sono un concetto di sistema operativo, quindi per dire qualcosa di utile per rispondere a questa domanda dovresti conoscere il sistema operativo. –

risposta

4

Nei sistemi operativi POSIX, è possibile chiamare opendir() e readdir(). In Windows puoi chiamare _findfirst() e _findnext(). Con un piccolo sforzo è possibile implementare opendir() e readdir() come funzioni wrapper in Windows, in modo che il codice dell'applicazione possa utilizzare la stessa API ovunque. Un esempio di questo può essere trovato here.

0

Questo è un compito classico, una soluzione possibilmente trovata in Kernigan & Ritchie - Il linguaggio di programmazione C (capitolo 8.6). L'essenza dell'attività è la traslazione ricorsiva della cartella di destinazione e delle sue sottocartelle.

+0

Perché questo è stato down-votato? La risposta * è * in questo capitolo di questo libro.Immagino sia stato down-votato perché prima devi possedere una copia? http://www.amazon.co.uk/C-Programming-Language-2nd/dp/0131103628 Vale la pena di acquistare seriamente se stai imparando C. –

+0

@GaryWilloughby: Si avvicina molto a dove K & R 2 mostra la sua età. C'è una funzione 'dirwalk()' nel capitolo che è utilizzabile. Quasi subito dopo, c'è un'implementazione di esempio di 'opendir()', 'readdir()', 'closedir()' che non serve a nessun sistema Unix corrente, ma che funzionava negli anni '80 e nei primi anni '90. (Non sono sicuro esattamente quando ha smesso di funzionare, dipende dalla piattaforma, in parte, ma molti POSIX-ish O/S si sono spostati su "devi usare il nostro' opendir() 'et al e non puoi usare quello di K & R 2 più "per, diciamo, 2005, e probabilmente molto prima.) –

+0

Ho detto" 'dirwalk()' è utilizzabile ". Richiede alcune piccole modifiche per renderlo utilizzabile con lo standard POSIX 'opendir()' et al. Il tipo 'Dirent' deve diventare' struct dirent' (o è necessario aggiungere 'typedef struct dirent Dirent;'), e i riferimenti a 'dp-> name' devono essere cambiati in' dp-> d_name'. –

4

È possibile utilizzare le funzioni dichiarate in dirent.h

dirent.h è l'intestazione nella libreria C POSIX per il linguaggio di programmazione C che contiene costrutti che facilitano directory di traslazione. La funzione non fa parte dello standard C , ma è considerata "pseudo-standard" ed è solitamente portatile tra le piattaforme.
http://en.wikipedia.org/wiki/Dirent.h

#include <dirent.h> 

int main(int argc, char **argv) 
{ 
    DIR *dir; 
    struct dirent *de; 

    dir = opendir("."); /*your directory*/ 
    while(dir) 
    { 
     de = readdir(dir); 
     if (!de) break; 
     printf("%i %s\n", de->d_type, de->d_name); 
    } 
    closedir(dir); 
    return 0; 
} 
1

Scopri i get_all_files_within_folder() ho scritto in C/C++ here, che ho risposto a una domanda simile ai suoi. Funziona perfettamente per me. Spero che sia d'aiuto.