IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ada Discussion :

Parcours de dossier avec Gnat.Directries_Operations


Sujet :

Ada

  1. #1
    Invité
    Invité(e)
    Par défaut Parcours de dossier avec Gnat.Directries_Operations
    Bonjour, j'essaie de lister le contenu d'un répertoire incluant les sous répertoires avec Gnat.Directries_Operations.

    Le contenu de mon répertoire est le suivant :

    bin
    Documentations
    obj
    src/lib/
    src/main.adb
    src/lib/aethers.ads
    src/lib/aether.adb

    J'ai écrit une procédure récursive qui semble de pas pouvoir descendre de plus d'un niveau de répertoire.
    Dans cette procédure je recueille les noms des fichiers dans un Containers.vectors.vector.
    Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    --
       procedure Parse(Path : in string ;Units_Vector : in out Units_Vectors.Vector) is
     
          Name             : String(1..256);
          Last             : Natural;
          Project_Dir      : Dir_Type;
       begin
          Open(Project_Dir, Path);
          Text_Io.Put_Line("Oppening : " & Path);
          loop
             Read(Project_Dir, Name, Last);
             if Last /= 0 then
                if (Name(1..Last) /= ".") and (Name(1..Last) /= "..") then
                   if Is_Directory(Name(1..Last)) then
                      Text_Io.Put_Line("Enterring sub directory : " & Name(1..Last));
                      Parse(Name(1..Last), Units_Vector);
                   else
                      Text_Io.Put_Line("Add unit : " & Name(1..Last));
                   end if;
                end if;
             else
                exit;
             end if;
          end loop;
          Close(Project_Dir);
       end Parse;

    Voici ce que j'obtiens :
    Oppening : ./
    Enterring sub directory : bin
    Oppening : bin
    Add unit : Aether
    Enterring sub directory : src
    Oppening : src
    Add unit : main.adb
    Add unit : lib
    Enterring sub directory : obj
    Oppening : obj
    Enterring sub directory : Documentations
    Oppening : Documentations
    Donc lib n'est pas visité, y a t il une soluce ?
    Merci pour vos réponses.

  2. #2
    Invité
    Invité(e)
    Par défaut Oui, je sais, ça va vite.
    En corrigeant avec un ajout du début du chemin, dans le path, ça marche mieux.

    Corrections :

    Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    procedure Parse(Path : in string ;Units_Vector : in out Units_Vectors.Vector) is                                                        
     
          Name             : String(1..256);                                                                                                   
          Last             : Natural;                                                                                                          
          Project_Dir      : Dir_Type;                                                                                                         
       begin
          Open(Project_Dir, Path);
          Text_Io.Put_Line("Oppening : " & Path);
          loop
             Read(Project_Dir, Name, Last);
             if Last /= 0 then
                if (Name(1..Last) /= ".") and (Name(1..Last) /= "..") then
                   if Is_Directory(Path & '/' & Name(1..Last)) then
                      Text_Io.Put_Line("Enterring sub directory : " & Name(1..Last));
                      Parse(Path  & '/' & Name(1..Last), Units_Vector);
                   else
                      Text_Io.Put_Line("Add unit : " & Name(1..Last));
                   end if;
                end if;
             else
                exit;
             end if;
          end loop;
          Close(Project_Dir);
       end Parse;

    Result :
    Oppening : ./
    Add unit : main.ali
    Add unit : aether.ali
    Enterring sub directory : bin
    Oppening : .//bin
    Add unit : Aether
    Add unit : main.o
    Enterring sub directory : src
    Oppening : .//src
    Add unit : main.adb
    Enterring sub directory : lib
    Oppening : .//src/lib
    Add unit : aether.adb
    Add unit : aether.ads
    Thx, merci beaucoup.

  3. #3
    Membre actif

    Homme Profil pro
    Mathématicien et développeur
    Inscrit en
    Mars 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Mathématicien et développeur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 132
    Points : 241
    Points
    241
    Billets dans le blog
    3
    Par défaut La même chose en Ada pur...
    Okazou, c'est aussi dans Ada.Directories. Exemple par ici:

    http://rosettacode.org/wiki/Walk_a_d...ecursively#Ada

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Zerte Voir le message
    Okazou, c'est aussi dans Ada.Directories. Exemple par ici:

    http://rosettacode.org/wiki/Walk_a_d...ecursively#Ada
    Merci Zerte.

Discussions similaires

  1. [ZIP] Comment zipper un dossier avec java?
    Par david06600 dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 05/05/2010, 21h22
  2. [Base de registre] Dossier avec toutes les appli
    Par doudoustephane dans le forum Autres Logiciels
    Réponses: 22
    Dernier message: 29/05/2006, 21h20
  3. Doublons de dossier avec samba
    Par jesus144 dans le forum Réseau
    Réponses: 1
    Dernier message: 20/12/2005, 15h30
  4. [SimpleXML] XML et parcours des noeuds avec foreach
    Par kult dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 15/11/2005, 15h36
  5. Suivre un lien .lnk ou sortir du dossier avec cygwin
    Par ThanosT dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 01/10/2005, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo