Page 1 sur 1

[resolu] lister les sous répertoires..

Publié : lun. 09/nov./2009 17:12
par Ar-S
Salut,
dans l'exemple pb concernant ExamineDirectory()

Code : Tout sélectionner

 Directory$ = "C:\"   ; Énumère le contenu du répertoire C (Les sous-répertoires ne sont pas examinés) 
If ExamineDirectory(0, Directory$, "*.*")  
  While NextDirectoryEntry(0)
    If DirectoryEntryType(0) = #PB_DirectoryEntry_File
      Type$ = " [Fichier] "
    Else
      Type$ = " [Sous-répertoire] "
    EndIf
    
    Debug DirectoryEntryName(0) + Type$ + "- Taille en octet : " + Str(DirectoryEntrySize(0))
  Wend
  FinishDirectory(0)
EndIf
On voit que l'on peut au choix lister fichier et/ou dossier.

Je voudrais lister les dossiers mais incluant aussi les sous dossiers.

Dans la doc il est dit que Filtre$ permet de sélectionner quels types de fichiers doivent être retenus. Par exemple, un 'Filtre$' "*.*" ou "" retiendra tous les fichiers (et sous-dossiers) du répertoire .


Donc le code suivant devrait ne lister que les dossier et sous dossiers du répertoire mais il ne liste que les dossiers

Code : Tout sélectionner

Directory$ = "C:\"
If ExamineDirectory(0, Directory$, "*.*")  
  While NextDirectoryEntry(0)
    If DirectoryEntryType(0) = #PB_DirectoryEntry_Directory
      Debug LCase(DirectoryEntryName(0))
    EndIf
  Wend
  FinishDirectory(0)
EndIf
Que je mette "*.*" ou "" en filtre ça ne change rien.

Ma question est donc : comment lister aussi les sous dossiers des répertoires présents dans le dossier listé ?

Je pense que l'explication de la doc est un peu bancale, car j'en déduit qu'il est dit que ça liste les dossiers du dit répertoire, et non les sous-dossiers.

Re: lister les sous répertoires..

Publié : lun. 09/nov./2009 17:34
par Cls
As - tu essayé avec "*" (sans point .) ?

Si tu veux lister les sous dossiers, il faut faire une fonction récursive.

Code : Tout sélectionner

Procedure Scan_Directory(source.s,  rek = 0) ; Source, indice 
  
  ; Ajoute les "\" 
  If Right(source, 1) <> "\" : source + "\" : EndIf
  
  If ExamineDirectory(rek, source, "*")
    While NextDirectoryEntry(rek) 
      ; Nom & Type répertoire source
      s_name.s = DirectoryEntryName(rek) : s_type = DirectoryEntryType(rek) 
      
      Select s_type          
        
        Case #PB_DirectoryEntry_File 
          s_fullname.s = source + s_name
          Debug s_fullname

          
        Case #PB_DirectoryEntry_Directory 
          If s_name <> "." And s_name <> ".." 
            Scan_Directory(source + s_name, rek + 1)
            
          EndIf      
      EndSelect 
    Wend 
    
    ;Libère la mémoire
    FinishDirectory(rek) 
    
  EndIf 
;
EndProcedure

Scan_Directory("D:\")

Re: lister les sous répertoires..

Publié : lun. 09/nov./2009 17:43
par GallyHC
Bonjour,

Si cela ne fonctionne pas comme tu veux je pense qu’une procédure récursive peu être bien…

Cordialment,
GallyHC

PS: je viens de voir que Cls propose aussi cela :) et il a ete plus rapide

Re: lister les sous répertoires..

Publié : mar. 10/nov./2009 13:09
par Ar-S
Ok, merci les gars, en modifiant un peu je devrais arriver à faire ce dont j'ai besoin. :)