Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1449 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C]comment afficer seulement les fichiers avec readdir ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C]comment afficer seulement les fichiers avec readdir ?

n°1653042
Zohardus
Unix power
Posté le 05-12-2007 à 05:24:13  profilanswer
 

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);
    }
}
 

mood
Publicité
Posté le 05-12-2007 à 05:24:13  profilanswer
 

n°1653045
Elmoricq
Modérateur
Posté le 05-12-2007 à 07:12:08  profilanswer
 

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.

n°1653236
Zohardus
Unix power
Posté le 05-12-2007 à 13:31:50  profilanswer
 

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

n°1653239
Elmoricq
Modérateur
Posté le 05-12-2007 à 13:41:43  profilanswer
 

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
n°1653266
Taz
bisounours-codeur
Posté le 05-12-2007 à 14:17:41  profilanswer
 

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.

n°1653267
Zohardus
Unix power
Posté le 05-12-2007 à 14:21:19  profilanswer
 

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 ?

n°1653268
Elmoricq
Modérateur
Posté le 05-12-2007 à 14:23:02  profilanswer
 

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
n°1653271
Elmoricq
Modérateur
Posté le 05-12-2007 à 14:24:23  profilanswer
 

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
n°1653272
Taz
bisounours-codeur
Posté le 05-12-2007 à 14:26:40  profilanswer
 
n°1653275
Elmoricq
Modérateur
Posté le 05-12-2007 à 14:30:04  profilanswer
 


 

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]

mood
Publicité
Posté le 05-12-2007 à 14:30:04  profilanswer
 

n°1653384
tpierron
Posté le 05-12-2007 à 16:11:07  profilanswer
 

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.

n°1653762
Emmanuel D​elahaye
C is a sharp tool
Posté le 06-12-2007 à 12:58:27  profilanswer
 

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/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C]comment afficer seulement les fichiers avec readdir ?

 

Sujets relatifs
hacking? à quoi servent ces fichiers php uploadés sur mon site?[batch] copier tous les fichiers anciens avec arborescence
Les fichiers en Cdeplacer n-1 fichiers vers un autre repertoire
Déplacer les fichiers d'un dossier à un autre ?batch: Découper un fichier en plusieurs fichiers
[Batch] Déplacer des fichiers dans des dossiers?Sauvegarde des fichiers c ou c++ sous visual c++
Hébergement de fichiers & création d'un FTP sécurisé pr téléchargementExploiter Données fichiers csv sur excel
Plus de sujets relatifs à : [C]comment afficer seulement les fichiers avec readdir ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR