Page 1 sur 1

[resolu] ListAll() peut-on faire plus simple.. ?

Publié : lun. 28/juin/2010 19:45
par Ar-S
Voilà une tite procédure pour lister fichier ou dossier ou les 2 avec possibilité d'afficher les extensions ou pas pour les fichiers.

Mais vu la taille du code ça me parait énorme. On doit surement pouvoir faire plus court. une idée ?

Code : Tout sélectionner

global NewList fichier.s()

;QuoiLister
#dossier=2
#fichier=1
#all=0

;Mode (afficher les extensions pour les fichiers ou pas)
#EXToui=1
#EXTnon=0

Directory$ = "d:\"

; by Ar-S
Procedure ListAll(repertoire$,QuoiLister,Mode)
  If ExamineDirectory(0, repertoire$, "*.*")  
    While NextDirectoryEntry(0)
      select QuoiLister
        ;Tout lister
        case #all
          If DirectoryEntryType(0) = #PB_DirectoryEntry_File
            AddElement(fichier())
            Fichier()=DirectoryEntryName(0)
            NbrFichier=ListIndex(fichier())+1
          Else
            AddElement(fichier())
            Fichier()=DirectoryEntryName(0)
            NbrFichier=ListIndex(fichier())+1
          EndIf
          Phrase$="Nombre total de fichiers et de dossier : "
          
        ; ne lister que les fichiers  
        case #fichier
          If DirectoryEntryType(0) = #PB_DirectoryEntry_File
            AddElement(fichier())
            Fichier()=DirectoryEntryName(0)
            NbrFichier=ListIndex(fichier())+1
          endif
          Phrase$="Nombre total de fichiers : "
          
        ; ne lister que les dossiers  
        case #dossier  
          If DirectoryEntryType(0) <> #PB_DirectoryEntry_File
            AddElement(fichier())
            Fichier()=DirectoryEntryName(0)
            Nbrfichier=ListIndex(fichier())+1
          EndIf
          Phrase$="Nombre total de dossiers : "
      EndSelect
    Wend
    FinishDirectory(0)
    ResetList(fichier())
    select mode
        ; On veut voir les extensions des fichiers
     case #EXToui
        
        Debug Phrase$+str(NbrFichier)
        While NextElement(fichier())
          Debug fichier()
        Wend

        ; On ne veut pas voir les extensions des fichiers
      case #EXTnon
        
        Debug Phrase$+str(NbrFichier)
        While NextElement(fichier())
          
          if mid(fichier(),len(fichier())-3,1)="."
            NomFichier$=left(fichier(),len(fichier())-4)
          else
            NomFichier$=fichier()
          EndIf
          Debug NomFichier$
        Wend
    EndSelect

  EndIf
EndProcedure

;Exemple (activer le debug)
ListAll("d:\",#all,0)

Re: ListAll() peut-on faire plus simple.. ?

Publié : lun. 28/juin/2010 21:22
par lepiaf31
Moi j'ai fais ca:

Code : Tout sélectionner

;QuoiLister
#dossier=2
#fichier=1
#all=0

;Mode (afficher les extensions pour les fichiers ou pas)
#EXToui=1
#EXTnon=0

Procedure ListAll(repertoire$,QuoiLister,Mode, List fichier.s())
  If Right(repertoire$, 1) <> "\"
    repertoire$ + "\"
  EndIf
  
  directory = ExamineDirectory(#PB_Any, repertoire$, "*.*")
  If directory
    While NextDirectoryEntry(directory)
      If DirectoryEntryType(directory) = #PB_DirectoryEntry_File
        If QuoiLister = #fichier Or QuoiLister = #all ;on doit lister le fichier
          If mode = #EXToui
            AddElement(fichier())
            fichier() = repertoire$ + DirectoryEntryName(directory)
          Else
            AddElement(fichier())
            pos = FindString(DirectoryEntryName(directory), ".", 1)
            If pos
              name$ = Left(DirectoryEntryName(directory), Len(DirectoryEntryName(directory))-Len(GetExtensionPart(DirectoryEntryName(directory)))-1)
            Else
              name$ = DirectoryEntryName(directory)
            EndIf
            fichier() = repertoire$ + name$
          EndIf
        EndIf
      Else
        If (QuoiLister = #dossier Or QuoiLister = #all) And DirectoryEntryName(directory) <> "." And DirectoryEntryName(directory) <> ".."
          AddElement(fichier())
          fichier() = repertoire$ + DirectoryEntryName(directory)
        EndIf
      EndIf
    Wend
    FinishDirectory(directory)
  EndIf
EndProcedure


;TEST
NewList test.s()
ListAll("C:\", #fichier, #EXTnon, test())

ForEach test()
  Debug test()
Next

Re: ListAll() peut-on faire plus simple.. ?

Publié : lun. 28/juin/2010 21:24
par Backup
.......................

Re: ListAll() peut-on faire plus simple.. ?

Publié : lun. 28/juin/2010 21:26
par lepiaf31
Dobro a écrit :je prefere les fonctions recursive , car elles affichent les sous-sous directory aussi :)
A ne pas tester avec le repertoire C:\ , ca risque de prendre du temps sinon ^^

Re: ListAll() peut-on faire plus simple.. ?

Publié : lun. 28/juin/2010 21:39
par Fred
Voici une version plus courte:

Code : Tout sélectionner

;QuoiLister
#dossier = #PB_DirectoryEntry_Directory
#fichier = #PB_DirectoryEntry_File
#all = -1

;Mode (afficher les extensions pour les fichiers ou pas)
#EXToui=1
#EXTnon=0

Directory$ = "c:\"

; by Ar-S
Procedure ListAll(List fichier.s(), repertoire$,QuoiLister,Mode)
  ClearList(fichier())
  
  If ExamineDirectory(0, repertoire$, "*.*") 
    
    While NextDirectoryEntry(0)
      
      If QuoiLister = #all Or DirectoryEntryType(0) = QuoiLister
        AddElement(fichier())
        Fichier() = DirectoryEntryName(0)
      EndIf
        
    Wend
    
    Select QuoiLister
      Case #all
        Debug "Nombre total de fichiers et de dossier : " + Str(ListSize(fichier()))   
       
      Case #fichier
        Debug "Nombre total de fichiers : " + Str(ListSize(fichier()))   
       
      Case #dossier 
        Debug "Nombre total de dossiers : " + Str(ListSize(fichier()))   
    EndSelect
    
    FinishDirectory(0)
  EndIf
  
  ForEach fichier()
    Select mode
      Case #EXToui ; On veut voir les extensions des fichiers
        Debug fichier()
        
      Case #EXTnon ; On ne veut pas voir les extensions des fichiers
        If GetExtensionPart(fichier()) <> ""
          Debug Left(fichier(), Len(fichier()) - (Len(GetExtensionPart(fichier()))+1))
        Else
          Debug fichier()
        EndIf
    EndSelect
  Next
EndProcedure

;Exemple (activer le debug)
NewList fichier.s()
ListAll(fichier(), Directory$, #all, 1)
Note: les extensions ne font pas toutes 3 caracteres..

Re: ListAll() peut-on faire plus simple.. ?

Publié : lun. 28/juin/2010 21:48
par Ar-S
Merci les copains, et merci Fred !
ça me fait bien plaisir que tu ais mis la main à la patte ! Image