comment afficer seulement les fichiers avec readdir ? [C] - C - Programmation
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.
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.
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().
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.
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 ?
Marsh Posté le 05-12-2007 à 14:23:02
Taz a écrit :
|
J'ai pas ça sur mon système. Tiré de sys/dirent.h sur mon vieux solaris 2.8 :
/* |
Mais je ne connais pas la norme sur la définition de dirent, si t'as ça sous le coude je suis preneur.
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.
Marsh Posté le 05-12-2007 à 14:26:40
http://www.opengroup.org/onlinepub [...] ent.h.html
y a rien toutes façons sans POSIX
Marsh Posté le 05-12-2007 à 14:30:04
Taz a écrit : http://www.opengroup.org/onlinepub [...] ent.h.html |
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.
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.
Marsh Posté le 06-12-2007 à 12:58:27
Taz a écrit : |
Beuh, c'est pas portable...
http://www.opengroup.org/onlinepub [...] ent.h.html
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);
}
}