2010-10-24 4 views
5

je chemin vers un dossier par exempleObtenir la liste des fichiers dans un dossier en utilisant C

/myfolder

ou dans Windows:

C: \ myfolder

et je veux obtenir une liste de tous les fichiers dans ce dossier. Comment dois-je faire en C?

Est-ce différent en C++ ou C99?

Comment puis-je obtenir une liste de ses dossiers?

Toute aide est appréciée.

+2

Cette question n'a rien à voir avec C ou C++ mais avec le système d'exploitation que vous utilisez. S'il vous plaît soyez plus précis. –

+0

@Jens Uh? Où voyez-vous l'ambiguïté? De plus, cela a beaucoup à voir avec C ou C++. –

+3

C en tant que langue a IO sur les fichiers, mais ne connaît même pas le concept de répertoires. Les répertoires sont un concept d'OS, donc pour dire quelque chose d'utile pour répondre à cette question, vous devez connaître le système d'exploitation. –

Répondre

4

Dans les systèmes d'exploitation POSIX, vous pouvez appeler opendir() et readdir(). Dans Windows, vous pouvez appeler _findfirst() et _findnext(). Avec un peu d'effort, vous pouvez implémenter vos propres fonctions opendir() et readdir() sous Windows, afin que votre code d'application puisse utiliser la même API partout. Un exemple de cela peut être trouvé here.

0

Ceci est une tâche classique, une solution possible peut-être trouver dans Kernigan & Ritchie - Le langage de programmation C (chapitre 8.6). L'essence de la tâche est le cheminement récursif du dossier cible et de ses sous-dossiers.

+0

Pourquoi cela a-t-il été voté? La réponse * est * dans ce chapitre de ce livre.Je suppose qu'il a été rejeté parce que vous devez d'abord posséder une copie? http://www.amazon.co.uk/C-Programming-Language-2nd/dp/0131103628 Il vaut vraiment la peine d'acheter si vous apprenez C. –

+0

@GaryWilloughby: Ce jupes très proche de l'endroit où K & R 2 montre son âge. Il y a une fonction 'dirwalk()' dans le chapitre qui est utilisable. Presque immédiatement après, il y a un exemple d'implémentation de 'opendir()', 'readdir()', 'closedir()' qui n'est utile sur aucun système Unix actuel - mais qui fonctionnait dans les années 80 et au début des années 90. (Je ne sais pas exactement quand ça a cessé de fonctionner, ça dépend en partie de la plate-forme, mais la plupart des POSIX-ish O/S sont passés à "vous devez utiliser notre' opendir() et al et ne pouvez pas utiliser celui de K & R 2 plus "par, disons, 2005, et probablement beaucoup plus tôt." –

+0

J'ai dit "' dirwalk() 'est utilisable". Il nécessite quelques ajustements mineurs pour le rendre utilisable avec POSIX standard 'opendir()' et al. Le type 'Dirent' doit devenir' struct dirent' (ou vous devez ajouter 'typedef struct dirent Dirent;'), et les références 'dp-> name' doivent être changées en' dp-> d_name'. –

4

Vous pouvez utiliser les fonctions déclarées dans dirent.h

dirent.h est l'en-tête dans la bibliothèque C pour la Posix langage de programmation C qui contient des constructions qui facilitent annuaire déplacement. La fonction ne fait pas partie de la norme C , mais est considérée comme "pseudo-standard" et est généralement portable entre les plates-formes.
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

Vérifiez la get_all_files_within_folder() je l'ai écrit en C/C++ here, que je répondu à une question semblable au vôtre. Cela fonctionne parfaitement pour moi. J'espère que cela aide.

Questions connexes