[C]comment afficer seulement les fichiers avec readdir ?

comment afficer seulement les fichiers avec readdir ? [C] - C - Programmation

Marsh Posté le 05-12-2007 à 05:24:13    

Voilà je voudrais seulement afficher les fichier contenus dans le répertoire courant, j'arrive à afficher les fichier mais ça affiche aussi '.' et '..' au début.
 
void    do_read(DIR *dir, int nb)
{
#ifdef HAVE_NOT_DIRENT_H
  struct direct *d;
#else
  struct dirent *d;
#endif
 
  while (d = readdir(dir))
    {
          my_putstr(d->d_name);
    }
}
 

Reply

Marsh Posté le 05-12-2007 à 05:24:13   

Reply

Marsh Posté le 05-12-2007 à 07:12:08    

Utilise stat() pour obtenir les informations d'une entrée de ton répertoire, ça te permettra de déterminer s'il s'agit d'un fichier ou non.

Reply

Marsh Posté le 05-12-2007 à 13:31:50    

Quand je fais un do_read, je peux plus refaire un autre à la suite, ça m'affiche que le premier.

Reply

Marsh Posté le 05-12-2007 à 13:41:43    

C'est normal, ton répertoire étant traité comme un flux, chaque lecture "avance dans le flux". Une fois arrivé à la fin, toute nouvelle lecture échoue et retourne 0, puisqu'il n'y a plus de nouvelle entrée à lire.
Si tu veux lire à nouveau le contenu du répertoire il faut réinitialiser le flux, par exemple avec une fermeture/réouverture ou avec la fonction rewinddir().


Message édité par Elmoricq le 05-12-2007 à 13:43:07
Reply

Marsh Posté le 05-12-2007 à 14:17:41    

Elmoricq a écrit :

Utilise stat() pour obtenir les informations d'une entrée de ton répertoire, ça te permettra de déterminer s'il s'agit d'un fichier ou non.


pas besoin, utilie d->d_type.

Reply

Marsh Posté le 05-12-2007 à 14:21:19    

Pour classer par ordre alphabétique ou par date on est obligé de stocké les nom de fichier avant et ensuite de les classer. Et pour les dates je vois pas comment utiliser stat, comment comparer le ctime d'un fichier avec un autre ?

Reply

Marsh Posté le 05-12-2007 à 14:23:02    

Taz a écrit :


pas besoin, utilie d->d_type.

 

J'ai pas ça sur mon système. Tiré de sys/dirent.h sur mon vieux solaris 2.8 :

/*
 * File-system independent directory entry.
 */
typedef struct dirent {
 ino_t  d_ino;  /* "inode number" of entry */
 off_t  d_off;  /* offset of disk directory entry */
 unsigned short d_reclen; /* length of this record */
 char  d_name[1]; /* name of file */
} dirent_t;

 

Mais je ne connais pas la norme sur la définition de dirent, si t'as ça sous le coude je suis preneur. [:dawa]

 


Message édité par Elmoricq le 05-12-2007 à 14:27:24
Reply

Marsh Posté le 05-12-2007 à 14:24:23    

Zohardus a écrit :

Pour classer par ordre alphabétique ou par date on est obligé de stocké les nom de fichier avant et ensuite de les classer. Et pour les dates je vois pas comment utiliser stat, comment comparer le ctime d'un fichier avec un autre ?

 

Les dates retournés par stat() sont exprimées en nombre de secondes écoulées depuis The Epoch, donc c'est facile, un ctime supérieur à un autre signifie que le fichier a une date de modification de statut plus récente. [:dawa]


Message édité par Elmoricq le 05-12-2007 à 14:25:31
Reply

Marsh Posté le 05-12-2007 à 14:26:40    

Reply

Marsh Posté le 05-12-2007 à 14:30:04    


 

Citation :

The internal format of directories is unspecified.


 
Pas très pratique, en gros si l'on veut taper dans du multiplateforme faut pas utiliser le contenu de dirent à part d_ino et d_name, c'est supaÿr. :/
Merci en tout cas. [:romf]

Reply

Marsh Posté le 05-12-2007 à 14:30:04   

Reply

Marsh Posté le 05-12-2007 à 16:11:07    

Elmoricq a écrit :

Pas très pratique, en gros si l'on veut taper dans du multiplateforme faut pas utiliser le contenu de dirent à part d_ino et d_name, c'est supaÿr. :/


 
Mouais, et encore d_ino, je suis quasiment sur que c'est inutilisable sous Windows.

Reply

Marsh Posté le 06-12-2007 à 12:58:27    

Taz a écrit :


pas besoin, utilie d->d_type.


Beuh, c'est pas portable...
 
http://www.opengroup.org/onlinepub [...] ent.h.html
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed