
Bon, je jette l'éponge. Je n'arrive pas a lister les dossiers vides et je ne comprend pas pourquoi


Si vous avez une réponse (ou un autre code), je suis preneur :
Code : Tout sélectionner
Enumeration
#MainForm
#StartStop
#ListFolder
#CountFiles
EndEnumeration
Global CountFiles.i
Global Chemin$ = PathRequester("Répertoire a scanner", GetUserDirectory(#PB_Directory_Desktop))
Global nb=1000
Global Dim name$(nb)
Global Dim taille.q(nb)
Global Dim contenu.q(nb)
Global actu=0
;Parcourir un dossier (Fonction recurssive by Flype il me semble)
Procedure.s ParseDirectory(folder.s, id.l = 0)
If Right(folder, 1) <> "\"
folder + "\"
EndIf
If ExamineDirectory(id, folder, "*.*")
While NextDirectoryEntry(id) And GetGadgetData(#StartStop)=#True
If DirectoryEntryName(id) <> "." And DirectoryEntryName(id) <> ".."
AddGadgetItem(#ListFolder,-1, folder +Chr(10)+DirectoryEntryName(id))
Debug folder
countFiles+1
SetGadgetText(#CountFiles, Str(CountFiles))
If DirectoryEntryType(id) = #PB_DirectoryEntry_Directory
; Debug DirectoryEntryName(id)
For i=1 To actu
If name$(i)=folder
taille(i)+DirectoryEntrySize(id)
Goto la2
EndIf
Next
actu+1
name$(actu)=folder+DirectoryEntryName(id)
la2:
ParseDirectory(folder + DirectoryEntryName(id), id + 1)
Else
For i=1 To actu
If name$(i)=folder
taille(i)+DirectoryEntrySize(id)
Goto la1
EndIf
Next
actu+1
name$(actu)=folder
taille(actu)+DirectoryEntrySize(id)
la1:
EndIf
;Debug "=> "+name$(actu)+ " : "+taille(actu)
EndIf
Wend
FinishDirectory(id)
EndIf
EndProcedure
Procedure StartThread(*Value)
ClearGadgetItems(#ListFolder)
CountFiles=0
ParseDirectory(Chemin$)
While GetGadgetData(#StartStop)=#True
Wend
EndProcedure
Procedure MainFormShow()
OpenWindow(#MainForm,0,0,800,600,"Lecture d'un dossier(Thread)",#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget)
TextGadget(#PB_Any, 10, 10, 50, 20, "Fichier(s)")
TextGadget(#CountFiles, 100, 10, 80, 20, "0")
ListIconGadget(#ListFolder, 10, 30, 780,530, "Dossier", 380)
AddGadgetColumn(#ListFolder, 1, "Fichier",390)
ButtonGadget(#StartStop, 10, 570, 780, 20, "Start/Stop")
EndProcedure
MainFormShow()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #StartStop
If GetGadgetData(#StartStop)=#False
SetGadgetData(#StartStop, #True) ;Indiquer au bouton qu'il est actif
tread=CreateThread(@StartThread(), 0)
Else
SetGadgetData(#StartStop, #False)
EndIf
EndSelect
Case #PB_Event_SizeWindow
WWidth=WindowWidth(#MainForm)
Wheight=WindowHeight(#MainForm)
ResizeGadget(#ListFolder, #PB_Ignore, #PB_Ignore , WWidth-10, Wheight-75)
ResizeGadget(#StartStop, (WWidth/2)-35, Wheight-30 , #PB_Ignore, #PB_Ignore)
Case #PB_Event_CloseWindow
If tread<>0
KillThread(tread)
EndIf
End
EndSelect
ForEver
Il vous faut par exemple 2 dossiers avec, dans le premier, un fichier.