Faire un " DIR *.mp3 /B /S > listmp3.txt" en pu

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Yves Rouquier
Messages : 40
Inscription : mar. 23/mars/2004 10:23

Faire un " DIR *.mp3 /B /S > listmp3.txt" en pu

Message par Yves Rouquier »

Bonjour !
tout est dans le sujet !

C'est a dire faire une liste de tous les "mp3" d'un repertoire mais
aussi des sous repertoires


J'aimerai avoir le meme resultat avec les commandes Examinedirectory
NextDirectoryEntry() DirectoryEntryName() etc ...

Ce n'est pas aussi simple que ça en a l'air !
on ne connait pas la "profondeur" des repertoire a l'avance !
je ne vois pas comment construire l'algo pour faire cette manip
sans doute l'utilisation de structure recurcive !

Mais je n'ais pas envie de reinventer la roue
si vous avez du code !
Merci
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Code trouvé sur CodeArchiv:

Code : Tout sélectionner

; English forum: http://www.curvesoftware.co.uk/purebasic/topic.asp?TOPIC_ID=5904
; Author: Sebi
; Date: 18. April 2003

Procedure.s ListFiles(directory.s , filename.s, extension.s , directoryid.l )
  If Right(directory,1)<>"\"
    directory+"\"
  EndIf
  
  ExamineDirectory(directoryid,directory,"*.*")
  dirid=NextDirectoryEntry()
  While dirid
    Select dirid
      Case 1
        file.s=DirectoryEntryName()
        this_extension.s=LCase(GetExtensionPart(file))
        this_filename.s=LCase(Left(file,Len(file)-Len(this_extension)))
        If Len(this_extension)
          this_filename=Left(this_filename,Len(this_filename)-1)
        EndIf
        If this_extension=extension Or extension="*"
          If this_filename=filename Or filename="*"
            file.s=directory+DirectoryEntryName()
            
            ;file contains the full path and filename
            ;you must insert here what to do with the file
            Debug file
                
          EndIf
        EndIf
      Case 2
        If DirectoryEntryName()<>"." And DirectoryEntryName()<>".."     
          ListFiles(directory+DirectoryEntryName()+"\",filename,extension,directoryid+1)      
          UseDirectory(directoryid)
        EndIf
    EndSelect
    dirid=NextDirectoryEntry()
  Wend
  ProcedureReturn ""
EndProcedure

Debug "all txt-files in c:\windows\"
ListFiles("C:\Windows","*","txt",0)      ; the last parameter should be zero
Debug ""
Chris :)
Yves Rouquier
Messages : 40
Inscription : mar. 23/mars/2004 10:23

Merci

Message par Yves Rouquier »

je n'avais pas assez chercher j'ais trouver la meme source .

C'est bien une procedure recurcive !

Merci encore .

la prochaine fois je ferai tourner 7 fois google
avant de poster une question !
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Message par ZapMan »

C'est un bien beau bout de code !

Notes pour ceux que la construction de cette procédure pourrait intriguer :
La récursivité, c'est quand une procédure s'appelle elle-même. Le problème des dossiers qui peuvent contenir des dossiers qui peuvent contenir des dossiers... etc... est un très bon exemple de cas compliqué de programme pour lequel l'utilisation de la récursivité est intéressante.
Pour ceux qui auraient peur de la récursivité (qui implique des règles de programmation assez strictes), j'utilise parfois une petite combine logique qui arrive au même résultat :

Code : Tout sélectionner

cont=1
While cont
  cont = 0
  For i =1 to x
    If Condition
       ; action a effectuer
       cont = 1 ; si la condition a été rencontrée, on refait la boucle
    EndIf
  Next
Wend
Tout obstacle est un point d'appui potentiel.

Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Répondre