Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LISTER L'ARBORESCENCE D'UN RÉPERTOIRE (SOUS-DOSSIER,FICHIERS)


Information sur la source

Catégorie :Fichier / Disque Niveau : Débutant Date de création : 29/09/2004 Vu : 15 482

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

Description

Cette source liste tous les sous-dossiers et les fichiers d'un répertoire et liste le contenu des sous-dossiers, ainsi de suite... dans un fichier texte créer sur le bureau.

Le code est fonctionnel sous win XP, je ne l'ai pas tester sur d'autre.
Prêt à être utilisé en Vbscript, VBA ...

Le code est documenté et je vous laisse découvrir les possibilités de se traitement.

Il existe déjà en exemple avec la commande Dir, mais ne fonctionne pas sous vbscript.
 

Source

  • Dim ShellO: Set ShellO = CreateObject("WScript.Shell")
  • Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
  • Dim SListe: Dim Schemin
  • 'Dossier à traiter
  • Schemin = "C:\" 'Dossier à modifier
  • 'Dossier Bureau de windows + "\"
  • SListe = ShellO.SpecialFolders("Desktop")
  • If Right(SListe, 1) <> "\" Then SListe = SListe & "\"
  • 'Ouverture du fichier contenant l'arborescence du répertoire à traiter vers le Bureau
  • Dim Fichier: Set Fichier = FSO.CreateTextFile(SListe & "Liste.txt", 1, True)
  • 'Écrire la premiere ligne de la liste
  • Fichier.WriteLine (Schemin)
  • 'Lister l'arborescence du dossier
  • ListerDossier Schemin, Fichier
  • 'Fermeture du fichier contenant l'arborescence du répertoire à traiter
  • Fichier.Close
  • Function ListerDossier(Schemin, Fichier) 'Lister l'arborescence du dossier
  • On Error Resume Next
  • Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
  • Dim ObjRep: Set ObjRep = FSO.GetFolder(Schemin) 'dossier
  • Dim ObjSubRep: Set ObjSubRep = ObjRep.SubFolders 'sous-dossiers
  • Dim ObjSubRepItem
  • For Each ObjSubRepItem In ObjSubRep 'Traiter chaque sous-dossiers
  • Fichier.WriteLine (ObjSubRepItem.Path) 'Ecrire le path dans la liste
  • ListerDossier ObjSubRepItem.Path, Fichier 'traiter les sous-dossiers
  • Next
  • Dim ObjRepFind: Set ObjRepFind = FSO.GetFolder(Schemin) 'dossier
  • Dim ObjSubFile: Set ObjSubFile = ObjRepFind.Files 'Fichiers
  • Dim ObjSubFileItem
  • For Each ObjSubFileItem In ObjSubFile 'Traiter chaque fichier du répertoire
  • Fichier.WriteLine ObjSubFileItem.Path 'Ecrire le path dans la liste
  • Next
  • End Function
Dim ShellO: Set ShellO = CreateObject("WScript.Shell")
Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim SListe: Dim Schemin
'Dossier à traiter
    Schemin = "C:\" 'Dossier à modifier
'Dossier Bureau de windows + "\"
    SListe = ShellO.SpecialFolders("Desktop")
    If Right(SListe, 1) <> "\" Then SListe = SListe & "\"
'Ouverture du fichier contenant l'arborescence du répertoire à traiter vers le Bureau
    Dim Fichier: Set Fichier = FSO.CreateTextFile(SListe & "Liste.txt", 1, True)
'Écrire la premiere ligne de la liste
        Fichier.WriteLine (Schemin)
'Lister l'arborescence du dossier
        ListerDossier Schemin, Fichier
'Fermeture du fichier contenant l'arborescence du répertoire à traiter
    Fichier.Close

Function ListerDossier(Schemin, Fichier) 'Lister l'arborescence du dossier
On Error Resume Next
Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim ObjRep: Set ObjRep = FSO.GetFolder(Schemin) 'dossier
Dim ObjSubRep: Set ObjSubRep = ObjRep.SubFolders 'sous-dossiers
Dim ObjSubRepItem
    For Each ObjSubRepItem In ObjSubRep 'Traiter chaque sous-dossiers
        Fichier.WriteLine (ObjSubRepItem.Path) 'Ecrire le path dans la liste
        ListerDossier ObjSubRepItem.Path, Fichier 'traiter les sous-dossiers
    Next
    Dim ObjRepFind: Set ObjRepFind = FSO.GetFolder(Schemin) 'dossier
    Dim ObjSubFile: Set ObjSubFile = ObjRepFind.Files 'Fichiers
    Dim ObjSubFileItem
    For Each ObjSubFileItem In ObjSubFile 'Traiter chaque fichier du répertoire
        Fichier.WriteLine ObjSubFileItem.Path 'Ecrire le path dans la liste
    Next
End Function

Commentaires et avis

signaler à un administrateur
Commentaire de tooffy123 le 30/09/2004 21:45:26

Merfiiiiiiiiiiiiiii !!!
Ca fé biento 2 ans ke jaten cette source !
Seulemen bon ca me préocupé pa + ke ca lol

signaler à un administrateur
Commentaire de PROGRAMMIX le 02/10/2004 12:20:25

>>> tooffy123
Tu n'as pas dû chercher beaucoup...
Le site regorge de ce genre de source...

IMPRIMER LE CONTENU DE VOS RÉPERTOIRES (+ APERÇU AVANT IMPRESSION) : http://www.vbfrance.com/code.aspx?id=4902

3 MÉTHODES DE RECHERCHE RÉCURSIVE DE FICHIERS : http://www.vbfrance.com/code.aspx?id=5089

signaler à un administrateur
Commentaire de andrieuremi le 09/10/2004 09:19:20

Moi je trouve ça plutôt intéressant.

signaler à un administrateur
Commentaire de nihaoma le 02/05/2005 19:42:44

c'est plutot un bon code, et au moins y'a pas besoin de mettre 150 dirlist, et autre controle du meme genre....juste une simple remarque, meme si je penses que tout le monde y pensera au bout d'un moment, dans la fonction de recherche, un p'tit 'DoEvents' au debut des 2 boucles For ne fait pas de mal, au contraire, car si comme moi, on lance betement le truc en concervant le chemin sur "C:\", on se retrouve avec un machine patinant dans la semoule jusqu'a la fin de la recherche....
sinon, c good...

signaler à un administrateur
Commentaire de trpp111 le 10/08/2005 16:08:47

Bonjour, j'ai un petit problème lié à ce type de gestion d'objets système : quand j'utilise des chemis de dossier, pas de problème. Par contre, dés que le "dossier" est une lettre de lecteur, comme le "c:\" de cette source, le chemin n'est pas reconnu. Y a t'il une déclaration spéciale à faire pour les lettres de lecteurs?

signaler à un administrateur
Commentaire de nihaoma le 10/08/2005 16:26:08

normalement non puisque le chemin est prit comme une chaine de caractère...essais peut etre de mettre un C (majuscule) ou bien juste c: (sans le slash)

signaler à un administrateur
Commentaire de trpp111 le 11/08/2005 11:35:38

Merci NIHAOMA.
J'ai effectivement essayé avec toutes les syntaxes posibles, mais le chemin n'est pas reconnu tant que je ne le déclare pas en lecteur. Et effectivement, quand je véfie le type d'objet, il s'agit bien d'un disque local. Mon problème est de lister et de copier les dossiers et fichiers sans passer par un DIR(). Quelqu'un aurait il une idée?

signaler à un administrateur
Commentaire de BruNews le 11/08/2005 11:43:33 administrateur CS

Hors VBS qui ne peut pas utiliser direct les APIs, c'est FindFirstFile et FindNextFile en récurrence pour parcourir une arborescence, imbattable niveau vitesse.
Doit surement y avoir des exemples en source sur ce site.

signaler à un administrateur
Commentaire de nihaoma le 11/08/2005 11:43:52

sans utiliser un DIR() ca risque de ne pas etre évident...éventuelement tu peux utiliser les API windows (ce qui reviendrait à faire ce que fait la commande DIR, mais en passant directement sur des call de la user32 et du kernel32) mais à part ca je vois pas....
mais je ne comprends pas trop ton problème en fait, pourquoi l'utilisation d'un DIR n'est pas possible ? de toutes facons, si tu veux copier les fichiers, ca veux dire qu'ils existent physiquement sur le disque, donc qu'ils appartienent à un lecteur, donc que tu peux utiliser un DIR pour y accéder non ?

signaler à un administrateur
Commentaire de trpp111 le 11/08/2005 12:09:01

Merci les gars, je devrais pouvoir me débrouiller avec ça. J'essayais de traiter de la même manière une arborescence depuis un répertoire classique et depuis un disque local mais je vais passer par un DIR. J'essaye findnextfile BruNews. Merci.
Je posterai un module regroupant tout ça au cas où quelqu'un se pose les mêmes questions.

signaler à un administrateur
Commentaire de PROGRAMMIX le 11/08/2005 12:38:23

Regarde les autres sources sur le sujet (dont celles que j'ai mises en référence dans mon message du 02/10/2004).

Clementio a également mis récemment une source sur ce thème : http://www.vbfrance.com/code.aspx?ID=33103.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,27 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.