65 votes

Comment obtenez-vous une liste de répertoires en C?

Comment analysez-vous un répertoire pour les dossiers et les fichiers en C? Il doit être multi-plateforme.

84voto

Clayton Points 2481

Ce qui suit imprimera les noms des fichiers dans le répertoire actuel:

 #include <stdio.h>
#include <sys/types.h>
#include <dirent.h>

int main (void)
{
  DIR *dp;
  struct dirent *ep;     
  dp = opendir ("./");

  if (dp != NULL)
  {
    while (ep = readdir (dp))
      puts (ep->d_name);

    (void) closedir (dp);
  }
  else
    perror ("Couldn't open the directory");

  return 0;
}
 

(crédit: http://www.gnu.org/software/libtool/manual/libc/Simple-Directory-Lister.html)

22voto

Will Dean Points 25866

La réponse stricte est "vous ne pouvez pas", car le concept même de dossier n'est pas vraiment multi-plateforme.

Sur les plates-formes MS, vous pouvez utiliser _findfirst, _findnext et _findclose pour une sensation 'c', ainsi que FindFirstFile et FindNextFile pour les appels Win32 sous-jacents.

Voici la réponse à la C-FAQ:

http://c-faq.com/osdep/readdir.html

19voto

congusbongus Points 2260

J'ai créé un en-tête open source (BSD) C qui traite de ce problème. Il supporte actuellement POSIX et Windows. Vérifie s'il te plaît:

https://github.com/cxong/tinydir

 tinydir_dir dir;
tinydir_open(&dir, "/path/to/dir");

while (dir.has_next)
{
    tinydir_file file;
    tinydir_readfile(&dir, &file);

    printf("%s", file.name);
    if (file.is_dir)
    {
        printf("/");
    }
    printf("\n");

    tinydir_next(&dir);
}

tinydir_close(&dir);
 

10voto

Andrew Grant Points 35305

Il n’existe pas de méthode standard C (ou C ++) pour énumérer les fichiers d’un répertoire.

Sous Windows, vous pouvez utiliser les fonctions FindFirstFile / FindNextFile pour énumérer toutes les entrées d'un répertoire. Sous Linux / OSX, utilisez les fonctions opendir / readdir / closedir.

6voto

PW. Points 3052

opendir / readdir sont POSIX. Si POSIX ne suffit pas pour la portabilité que vous souhaitez atteindre, vérifiez Apache Portable Runtime.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X