un petit code qui permet de lister le contenu d'un dossier en triant les dossiers et fichiers comme dans l'explorateur :
les dossiers d'abord puis les fichiers
ça donne ce genre de tri :
Code : Tout sélectionner
Truc
Truc\Bidule
Truc\Bidule\1.txt
Truc\Bidule\2.txt
Truc\24.txt
Machin
Machin\45.txt
744.txt
415.txt
Code : Tout sélectionner
NewList RechercheFichier.s()
Procedure RechercheFichiers(Num.l, Dossier.s)
If Right(Dossier, 1) <> "\" : Dossier + "\" : EndIf
If ExamineDirectory(Num, Dossier, "*.*")
Repeat
FileType = NextDirectoryEntry()
If FileType = 1
; On a un fichier
Name.s = DirectoryEntryName()
AddElement(RechercheFichier())
RechercheFichier() = ReplaceString(Left(Dossier, Len(Dossier) - 1), "\", "\?1?") + "\?2?" + Name
; on met ?1? devant le nom des dossier et ?2? devant le nom des fichiers
; Ainsi lors du tri des données, les dossiers seront placés avant les fichiers
; Il suffira ensuite de supprimer les ?1? et ?2? des noms de fichiers ou dossiers
; Le caratère ? n'étant pas utilisable dans les noms de fichiers, cet ajout ne présente aucun problème
Debug RechercheFichier()
ElseIf FileType = 2
; On a un dossier
Name.s = DirectoryEntryName()
If Name <> "." And Name <> ".."
AddElement(RechercheFichier())
RechercheFichier() = ReplaceString(Dossier, "\", "\?1?") + Name
Debug RechercheFichier()
RechercheFichiers(Num + 1, Dossier + Name)
UseDirectory(Num)
EndIf
EndIf
Until FileType = 0
EndIf
If Num = 0
; si on a finit la recherche
Debug ""
Debug "________________"
Debug ""
; On tri les noms de fichiers et dossiers
SortStructuredList(RechercheFichier(), 2, 0, #PB_Sort_String)
; On retire les ?1? et ?2?, et également l'adresse du dossier d'origine
ForEach RechercheFichier()
RechercheFichier() = RemoveString(RemoveString(RemoveString(RechercheFichier(), "?1?"), "?2?"), Dossier)
Debug RechercheFichier()
Next
EndIf
EndProcedure
; On donne le nom du dossier dont on souhaite lister le contenu
Dossier.s = "C:\Program Files\PureBasic\Catalogs"
If Right(Dossier, 1) <> "\" : Dossier + "\" : EndIf ; On s'assure qu'il y a bien un \ à la fin du nom du dossier
; On lance la recherche
RechercheFichiers(0, Dossier)
; Ouvre une fenêtre
If OpenWindow(0, 0, 0, 500, 200, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered, "Recherche fichiers") = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
ListIconGadget(0, 0, 0, 500, 200, "Fichiers et dossiers", 470)
; On rempli la liste de fichier
HideGadget(0, 1)
n = 0
ForEach RechercheFichier()
AddGadgetItem(0, -1, Space(CountString(RechercheFichier(), "\") * 3) + RechercheFichier())
Next
HideGadget(0, 0)
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow