Lister un dossier vide

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Lister un dossier vide

Message par SPH »

Salut a tous (et a toutes) :P

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.

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Lister un dossier vide

Message par venom »

Ce code te renvoi le nom des dossiers même vides
SPH a écrit :Je n'arrive pas a lister les dossiers vides et je ne comprend pas pourquoi :| :!:
Après cette phrase n'a pas trop de sens. Car lister un dossier vide te renvoi aucun retour :mrgreen:






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Naheulf
Messages : 193
Inscription : dim. 10/mars/2013 22:22
Localisation : France

Re: Lister un dossier vide

Message par Naheulf »

Je ne suis pas sûr de comprendre le problème.

Si tu cherches à inclure les dossiers vides dans ta liste… bah c’est déjà le cas.
— Arborescence utilisée pour le test :

Code : Tout sélectionner

D:\Users\Perso\Scripts\purebasic\Forum\fr_18078_Lister un dossier vide>tree "Dossier à lister" /f
Structure du dossier pour le volume Divers
Le numéro de série du volume est D6F8-B86D
D:\USERS\PERSO\SCRIPTS\PUREBASIC\FORUM\FR_18078_LISTER UN DOSSIER VIDE\DOSSIER À LISTER
├───Dossier plein
│       Nouveau document texte.txt
│
└───Dossier vide

D:\Users\Perso\Scripts\purebasic\Forum\fr_18078_Lister un dossier vide>
— Ce que ton programme affiche :

Code : Tout sélectionner

Fichier(s)       3
┌────────────────────────────────────────────────────────────────────────────────────────────────────────┬────────────────────────────┐
│ Dossier                                                                                                │ Fichier                    │
├────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────┤
│ D:\Users\Perso\Scripts\purebasic\Forum\fr_18078_Lister un dossier vide\Dossier à lister\               │ Dossier plein              │
│ D:\Users\Perso\Scripts\purebasic\Forum\fr_18078_Lister un dossier vide\Dossier à lister\Dossier plein\ │ Nouveau document texte.txt │
│ D:\Users\Perso\Scripts\purebasic\Forum\fr_18078_Lister un dossier vide\Dossier à lister\               │ Dossier vide               │
│                                                                                                        │                            │
└────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────┘
Si tu cherches à ne lister QUE les dossiers vides … je ne vois pas pourquoi tu fais le cumul de la taille des fichiers.
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Lister un dossier vide

Message par SPH »

Ajoutez un répertoire vide sur le bureau puis "scannez" avec le code. Il n'apparaît pas dans le debug... :oops:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lister un dossier vide

Message par Ar-S »

Chez moi il affiche bien les dossiers vide et non vide..
Sur mon bureau j'ai fait : Un dossier "dossier" contenant
\dossierNONvide\Deploiement_Fibre_Optique_Rieux.pdf dedans
et
\dossier\dossiervide


Resultat débug :
Nom elément : dossierNONvide
FOLDER : C:\Users\arswo\Desktop\dossier\
Nom elément : Deploiement_Fibre_Optique_Rieux.pdf
FOLDER : C:\Users\arswo\Desktop\dossier\dossierNONvide\
Nom elément : dossiervide
FOLDER : C:\Users\arswo\Desktop\dossier

En gros ton FOLDER c'est le dossier parent mais l'élément dans ce dossier parent c'est DirectoryEntryName(id)


Remplace ton debug folder par
Debug "Nom elément : " + DirectoryEntryName(id)
Debug "FOLDER : " + folder
ce sera déjà plus parlant.

Et à la fin de ton code remplace ton

Code : Tout sélectionner

 If tread<>0
        KillThread(tread)
      EndIf
par

Code : Tout sélectionner

 If IsThread(Thread)
        KillThread(tread)
      EndIf
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Lister un dossier vide

Message par SPH »

venom a écrit :Ce code te renvoi le nom des dossiers même vides
SPH a écrit :Je n'arrive pas a lister les dossiers vides et je ne comprend pas pourquoi :| :!:
Après cette phrase n'a pas trop de sens. Car lister un dossier vide te renvoi aucun retour :mrgreen:
Merci a tous et merci a toi venom. Je vais faire un mix avec mon code et le tiens :idea:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lister un dossier vide

Message par Ar-S »

Tu veux dire que tu n'as même pas essayé de regarder l'aide ? Tu abuses. :twisted:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Lister un dossier vide

Message par SPH »

Ar-S a écrit :Tu veux dire que tu n'as même pas essayé de regarder l'aide ? Tu abuses. :twisted:
Si, je consulte l'aide assez souvent mais pas là.

Puis bon, on est là sur le forum pour discuter... 8)

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lister un dossier vide

Message par Ar-S »

SPH a écrit : Puis bon, on est là sur le forum pour discuter... 8)
Oui mais en général, on essaye de résoudre des soucis que l'aide n'a pas réussi à apporter :mrgreen:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre