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 ???
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