111 votes

Comment lister des fichiers dans un répertoire dans un programme C?

J'essaie d'écrire un serveur FTP sur Linux. Dans cette affaire, comment puis-je lister les fichiers dans le répertoire du terminal avec un programme C? Peut-être que je peux utiliser la fonction exec pour exécuter la commande find mais je veux que le nom du fichier soit une chaîne pour envoyer le programme client. Comment puis-je faire ceci?

Merci pour les réponses.

218voto

JB Jansen Points 1426

Un exemple, disponible pour les systèmes compatibles POSIX:

 /*
 * This program displays the names of all files in the current directory.
 */

#include <dirent.h> 
#include <stdio.h> 

int main(void)
{
  DIR           *d;
  struct dirent *dir;
  d = opendir(".");
  if (d)
  {
    while ((dir = readdir(d)) != NULL)
    {
      printf("%s\n", dir->d_name);
    }

    closedir(d);
  }

  return(0);
}
 

Attention, une telle opération dépend de la plateforme en C.

Source: http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1046380353&id=1044780608

44voto

Kamiccolo Points 1568

Un tout petit ajout à la réponse de JB Jansen - dans la boucle principale readdir() j'aimerais ajouter ceci:

   if (dir->d_type == DT_REG)
  {
     printf("%s\n", dir->d_name);
  }
 

Je vérifie juste si c'est vraiment un fichier, pas un lien (sym), un répertoire ou quoi que ce soit.

REMARQUE: plus de documentation sur struct dirent en libc .

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