Bonjour,

J'essaie d'ouvrir des répertoires avec opendir(). J'aimerais pouvoir renvoyer le nom du fichier i celui-ci est passé en argument d'opendir().

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
  DIR   *dirp;
  struct dirent *dp;
  struct stat   stat_buffer;
 
  dirp = opendir (path);
  dp = readdir(dirp);
  printf("%s\n", dp->d_name);
  if ((dp = readdir(dirp)) == NULL)
    {
      printf("%s\n", path);
      return (1);
    }
  stat(dp->d_name, &stat_buffer);
  printf("%s\n", dp->d_name);
  if (dirp == NULL)
    {
      if (S_ISREG(stat_buffer.st_mode))
        printf("%s\n", path);
      else
        printf ("Cannot open directory '%s'\n", path);
      return 1;
    }
  while ((dp = readdir(dirp)) != NULL)
    {
      printf("%s\n",dp->d_name);
    }
  closedir (dirp);
La macro S_ISREG me permettrait de détecter si j'ai effectivement un fichier régulier, mais l'instance readdir m'aura déjà pondu un segfault.
Existe-t'il un moyen de le faire avec opendir ?
Je pourrais ainsi vérifier si j'ai un fichier régulier, auquel cas j'afficherais son nom, sinon si j'ai un path qui n'existe pas, je renverrais un erreur et autrement je pourrais travailler tranquillement dans mon répertoire.

EDIT : retrait des commentaires dans le code.