Page 1 sur 1

Récursivité ?

Publié : sam. 02/juil./2011 10:24
par SPH
Bonjour a tous,

Je ne sais pas comment on fait pour lister tous les fichiers d'un certain type dans tous les sous repertoires d'un chemin. J'ai bien cherché sur le forum mais Dobro a viré son post...

Re: Récursivité ?

Publié : sam. 02/juil./2011 10:31
par boddhi
Salut SPH.

Tout est dans l'aide...

Code : Tout sélectionner

If ExamineDirectory(0,"C:\","*.jpg")
  While NextDirectoryEntry(0)
    If DirectoryEntryType(0)=#PB_DirectoryEntry_File
       ...
    EndIf
  Wend
  FinishDirectory(0)
EndIf
Ton projet avance ?

Re: Récursivité ?

Publié : sam. 02/juil./2011 10:41
par lepiaf31

Code : Tout sélectionner

Procedure examine(path.s)
  Protected dir.i
  
  If Right(path, 1) <> "\"
    path + "\"
  EndIf
  
  dir = ExamineDirectory(#PB_Any, path, "*.*")
  If dir
    While NextDirectoryEntry(dir)
      Debug path + DirectoryEntryName(dir)
      If DirectoryEntryType(dir) = #PB_DirectoryEntry_Directory And DirectoryEntryName(dir) <> "." And DirectoryEntryName(dir) <> ".."
        examine(path + DirectoryEntryName(dir))
      EndIf
    Wend
    FinishDirectory(dir)
  EndIf
EndProcedure

Re: Récursivité ?

Publié : sam. 02/juil./2011 13:21
par SPH
Vos codes ne permettent pas de rentrer dans tous les repertoires. Je me demande si je ne vais pas eliminer cette option finalement...
boddhi a écrit :Ton projet avance ?
Doucement mais surement

Re: Récursivité ?

Publié : sam. 02/juil./2011 13:41
par lepiaf31
SPH a écrit :Vos codes ne permettent pas de rentrer dans tous les repertoires.
Heu désolé mais mon code permet de voir tous les sous repertoires ...

Re: Récursivité ?

Publié : sam. 02/juil./2011 14:00
par SPH
lepiaf31 a écrit :
SPH a écrit :Vos codes ne permettent pas de rentrer dans tous les repertoires.
Heu désolé mais mon code permet de voir tous les sous repertoires ...
Ce que j'appelle peut etre a tord la recursivité, c'est de partir de C:/ et d'arriver a fouiller dans c:/tmp/001/k/rep
Nan mais laisse tomber, je n'en ai pas besoin en fait. Merci

Re: Récursivité ?

Publié : sam. 02/juil./2011 16:03
par Chris
SPH a écrit :Ce que j'appelle peut etre a tord la recursivité, c'est de partir de C:/ et d'arriver a fouiller dans c:/tmp/001/k/rep
C'est bien la récursivité.

C'est peut-être ça que tu cherches.

Code : Tout sélectionner

Procedure Scan_Directory(Dir$,  Pattern$ = "*.*", Id = 0)
  If Right(Dir$, 1) <> "\" : Dir$ + "\" : EndIf
  
  If ExamineDirectory(Id, Dir$, "")
    While NextDirectoryEntry(Id)
      Nom$ = DirectoryEntryName(Id)
      Type  = DirectoryEntryType(Id)
      
      Select Type         
        Case #PB_DirectoryEntry_File
          FullName$ = Dir$ + Nom$
          If GetExtensionPart(FullName$) = Pattern$
            Debug FullName$
          EndIf
          
        Case #PB_DirectoryEntry_Directory
          If Nom$ <> "." And Nom$ <> ".."
            FullName$ = Dir$ + Nom$
            Debug FullName$
            
            Scan_Directory(FullName$, Pattern$, Id + 1)
          EndIf     
      EndSelect
    Wend
    
    FinishDirectory(Id)
    ProcedureReturn
  EndIf 
  
  
EndProcedure

Mon_Chemin$ = "C:\Program Files\PureBasic\"
Mon_Extension$ = "pb"

Scan_Directory(Mon_Chemin$, Mon_Extension$, 0)


Re: Récursivité ?

Publié : dim. 03/juil./2011 23:31
par GeBonet
OU encore... De je ne sais plus qui ??? :lol:

Code : Tout sélectionner

; *******************************************************************
;   ARBORESCENCES  - Liste de répertoire et fichiers... 
;
; *******************************************************************
#ImgFile = 1
#ImgFold = 2
;
Global Tree_0
;{- Images du TreeGadget
    If CreateImage ( #ImgFile , 16, 16)
        StartDrawing ( ImageOutput ( #ImgFile ))
        Box (0, 0, 16, 16, $8FF7F7)
        DrawText (3,0, "F" , $0306F8,$86F7F7)
        StopDrawing ()
    EndIf
    ;
    If CreateImage ( #ImgFold , 16, 16)
        StartDrawing ( ImageOutput ( #ImgFold ))
        Box (0, 0, 16, 16, $8FF7F7)
        DrawText (3,0, "D" , $FF0000,$86F7F7)
        StopDrawing ()
    EndIf
;}-
;-Procédures Recursive... 
Procedure ListeFichiers(NumDir.l, NameDir.s, Ext.s)
    
    File.s : NameDir = Trim (NameDir)
    ; Vérification de la chaine
   If Right (NameDir,1) = "." : NameDir = Left (NameDir, Len (NameDir)-1) : EndIf
   If Right (NameDir,1)<> "\" : NameDir+ "\" : EndIf
 
   ; Vérification de l'extension
   If Right (Ext, 1) = "*" Or Ext = ""
    NoExt = #True
   Else
        If FindString (Ext, "." , 1)
            Ext = GetExtensionPart (Ext) : NoExt = #False
        Else
            Ext = Ext : NoExt = #False
        EndIf
   EndIf
 
   If ExamineDirectory (NumDir, NameDir, "*.*" )
        While NextDirectoryEntry (NumDir)
        File = DirectoryEntryName (NumDir)
     
        Select DirectoryEntryType (NumDir)
            Case #PB_DirectoryEntry_File
         
                Select NoExt
                    Case #True
                        ; ********** Avec extension *********
                        AddGadgetItem (Tree_0, -1, File, ImageID ( #ImgFile ), NumDir)
                        ; ***********************************
                     Case #False
                           ;*********** Sans Extension *********
                           If GetExtensionPart (File) = Ext
                             AddGadgetItem (Tree_0, -1, File, ImageID ( #ImgFile ), NumDir)
                           
                           EndIf
                           ; ***********************************
                EndSelect
            Case #PB_DirectoryEntry_Directory
                If DirectoryEntryName (NumDir) <> "." And DirectoryEntryName (NumDir) <> ".."
                    ; ***********************************
                    AddGadgetItem (Tree_0, -1, DirectoryEntryName (NumDir), ImageID ( #ImgFold ), NumDir)
                    ;
                    ; ************  ICI ***********************
                    ListeFichiers(NumDir +1, NameDir + File, Ext)
                    ;
                EndIf
            EndSelect
        Wend
        FinishDirectory (NumDir)
    EndIf
EndProcedure
 
If OpenWindow (0, 5, 5, 400, 543, "Tree" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    Tree_0 = TreeGadget ( #PB_Any , 5, 5, 390, 535)
EndIf

; FICHIERS CONCERNES ou répertoire de départ 
;                
Chem$ = "C:\0 0 PureBasic46\PureBasic"  ; <<==== ICI La base du répertoire de la recherche 
ExtensionA_Chercher$ = "*.pb"            ; <<==== ICI L'extension ou base de fichier a rechercher 
; 
ListeFichiers(0, Chem$, ExtensionA_Chercher$)
;
Repeat
  Event = WaitWindowEvent ()
Until Event = #PB_Event_CloseWindow
End