> Tech > Lire des répertoires

Lire des répertoires

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

Pour extraire la liste des fichiers d’un répertoire, on utilise quatre API différentes : opendir (), readdir (), rewinddir () et closedir ().

L’API opendir () ouvre un répertoire afin que vous puissiez le lire. C’est comparable à ouvrir un fichier stream avec l’API open () excepté que,

bien entendu, elle ouvre un répertoire au lieu d’un fichier.

Elle accepte un paramètre, le nom de chemin du répertoire que vous voulez ouvrir. Elle renvoie un pointeur vers un « handle de répertoire ». Les API de répertoire utilisent ce pointeur pour suivre le répertoire particulier que vous avez ouvert. C’est semblable au concept « descripteur de fichier » que j’ai décrit dans le premier article de cette série.

L’API readdir () lit l’entrée de répertoire suivant dans le répertoire. Vous devez passer le handle de répertoire que vous avez extrait de l’API opendir (), afin que readdir () sache quel répertoire ouvert vous voulez lire. Cette API renvoie un pointeur vers une structure de données qui contient des informations sur chaque fichier présent dans le répertoire.

La figure 5 montre la structure de données vers laquelle l’API readdir () renvoie le pointeur. Cette structure de données est définie dans le copy book IFSIO_H, dont vous pouvez utiliser le mot-clé LIKEDS de RPG pour la référencer à partir de vos programmes. Bien que la structure de données d’entrée de répertoire contienne un grand nombre de champs, généralement les champs d_name et d_namelen sont les seuls utiles en programmation RPG.

L’API rewinddir () accepte comme son seul paramètre le handle de répertoire que renvoie opendir (). L’API rewinddir () remonte au début du listing de répertoires, de telle sorte que le prochain appel adressé à readdir () extraira à nouveau la première entrée du répertoire.

L’API closedir () ferme un répertoire ouvert. N’oubliez pas de fermer chaque répertoire dès que vous ne l’utilisez plus. En effet, les répertoires ne se ferment pas automatiquement à la fin du programme : si vous oubliez de fermer un répertoire, il reste ouvert jusqu’à la fin du groupe d’activation ou à la fin de votre job. Si cela se produit plusieurs fois, vous pourriez recevoir une erreur signalant qu’il y a trop de fichiers ouverts. Heureusement il est facile d’éviter ce problème : en n’oubliant pas d’appeler closedir ().

Le programme exemple READDIR (figure 6) démontre la lecture du contenu d’un répertoire à partir d’un programme RPG. Il commence par appeler l’API opendir () pour ouvrir le répertoire afin qu’il puisse être lu (A en figure 6). Une fois le répertoire ouvert, le programme appelle l’API readdir () en boucle pour extraire toutes les entrées de répertoire (B en figure 6). Quand le programme atteint la fin de la liste, l’API readdir () renvoie la valeur spéciale *NULL pour indiquer que le programme a atteint la fin du répertoire. La figure 7 montre la sortie affichée à l’écran quand le programme readdir () est exécuté.

Téléchargez cette ressource

Guide inmac wstore pour l’équipement IT de l’entreprise

Guide inmac wstore pour l’équipement IT de l’entreprise

Découvrez toutes nos actualités à travers des interviews, avis, conseils d'experts, témoignages clients, ainsi que les dernières tendances et solutions IT autour de nos 4 univers produits : Poste de travail, Affichage et Collaboration, Impression et Infrastructure.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010