Bonjour est ce qu'il existe une fonction en ada qui renvoie le nombre de fichier dans un répertoire ou une fonction qui parcours le dossier courant jusqu'à ce qu'il n'y est plus de fichier de manière récursive ou non ?
Bonjour est ce qu'il existe une fonction en ada qui renvoie le nombre de fichier dans un répertoire ou une fonction qui parcours le dossier courant jusqu'à ce qu'il n'y est plus de fichier de manière récursive ou non ?
Bonjour,
2 solutions, suivant le compilateur que tu as :
1. avec un compilateur Ada 2005, tu as le package Ada.Directories, et les fonctions/procédures Start_Search, More_Entries et Get_Next_Entry qui doivent te permettre de faire ce que tu souhaites. Je n'ai pas testé, mais je crois qu'un algo du style
devrait permettre de compter le nombre de fichiers dans un dossier (et seulement les fichiers).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 declare compteur : INTEGER := 0; begin Start_Search( Search, Directory, null ); while More_Entries( Search ) loop compteur := compteur + 1; Get_Next_Entry( Search, Directory_Entry ); end loop; end;
2. avec GNAT, tu as le package GNAT.Directory_Operations qui contient les procédures Open, Read et Close qui semble faire la même chose.
Pour ce qui est de la recherche récursive, je n'ai rien vu qui pourrait le faire, mais je suis sûr qu'avec un peu de recherche dans le Reference Manual, tu trouveras la solution.
Bon courage !
Pour plus d'informations sur l'utilisation du package ada.directories, tu as toujours le rational (qui pour une fois est plutôt pas mal fait).
http://www.adaic.org/standards/05rat/html/Rat-7-4.html
Pour ce qui est de faire une recherche récursive, utilises cette fonction :
Dès que tu tombes sur un repertoire, tu le parcours (avec une fonction de parcours qui admet en paramètre le dossier, ça ne doit pas te prendre très longtemps)
Code : Sélectionner tout - Visualiser dans une fenêtre à part function Kind(Name: String) return File_Kind;
merci de vos réponses mais je ne comprends pas ce que font toute ses fonctions et qu'est ce que le type search_type ?
Bonjour,
le type Search_Type définit un objet qui contient l'état d'une recherche.
A sa déclaration :
il ne contient aucune référence de recherche et le passer en argument à la fonction More_Entries te renverra false.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4declare Recursive_Search : Search_Type; ...
Tu l'initialises en le passant en argument à la procédure Start_Search, qui prend en arguments:
1. le Search_Type ;
2. le répertoire sur lequel tu fais ta recherche ;
3. un pattern de recherche sur les noms de fichier (qui, s'il vaut null matche tous les éléments du répertoire) ;
4. et (optionellement) un filtre sur le type des fichiers, la valeur par défaut de ce dernier ne filtrant rien (la recherche s'effectue sur tous les types de fichiers, à savoir : fichier normal, fichier spécial et répertoire).
Pour effectuer une opération sur tous les fichiers .doc d'un répertoire, tu feras appel à Start_Search de la manière suivante (exemple tiré du rationale):
alors que pour compter tous les sous-répertoires d'un répertoire, il faudra faire ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 declare Doc_Search : Search_Type; Doc_Filter : Filter_Type := ( Ordinary_File => True, others => false ); begin Start_Search( Doc_Search, "c:\le\repertoire\de\recherche", "*.doc", Doc_Filter); ...
A ce niveau, ton objet de type Search_Type référence tous les éléments de ton répertoire matchant à la fois le pattern et le filtre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 declare Sub_Folder_Search : Search_Type; Sub_Folder_Filter : Filter_Type := ( Directory => True, others => false ); begin Start_Search( Sub_Folder_Search, "c:\le\repertoire\de\recherche", null, Sub_Folder_Filter); ...
La boucle
est en fait un itérateur classique qui va te permettre de parcourir tous les résultats trouvés lors de l'appel à Start_Search et référencé dans Search_Type_Object.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ... while More_Entries( Search_Type_Object ) loop Get_Next_Entry( Search_Type_Object, Directory_Entry ); -- Process Directory_Entry end loop;
La procédure End_Search permet de "nettoyer" toutes les références contenues dans ton objet Search_Type.
La fonction Kind t'indique si le Directory_Entry de Get_Next_Entry est un fichier ordinaire, spécial ou un répertoire.
Voilà, une explication détaillée du Reference Manual, tu as toutes les billes pour faire ce que tu souhaites.
Bon courage !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager