[Basic] Explorer une arborescence de répertoires

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur: Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.

[Basic] Explorer une arborescence de répertoires

Messagepar bm92 » 31 Août 2007 12:59

Bonjour à tous,
L'instruction OOoBasic Dir permet d'explorer un répertoire. Mais elle ne peut pas être employée de manière récursive. Ceci complique l'exploration d'une arborescence (le livre Programmation OpenOffice.org 2 donne une solution, page 155).

Le service API SimpleFileAccess permet, lui, une approche récursive, et la boucle For Each disponible avec OOo 2.x simplifie un peu plus.

Le codage ci-dessous est un squelette à adapter à vos besoins.
Ici on compte les sous-répertoires et les fichiers.
En explorant C:\ sur mon PC j'ai obtenu en quelques minutes : 5517 répertoires et 70113 fichiers.
Code : Tout sélectionner   AgrandirRéduire
Option Explicit

' exemple : compter le nombre de sous-répertoires et le nombre total de fichiers
Private d as long, f as long

Sub Main
Dim depart As String
d= 0
f = 0
depart = ConvertToURL("C:\Docs OpenOffice\")
explorerDossier(depart)
MsgBox(d & " répertoires,   " & f & " fichiers")
End Sub


Sub explorerDossier(ByVal repEnCours As String)
Dim item As String
Dim ucb As Object, dc As Variant

ucb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
On Error GoTo accesInterdit
dc = ucb.getFolderContents(repEnCours, True)
' ici on obtient un tableau des url complètes
' de chaque fichier et chaque répertoire du répertoire en cours
' mais dans le désordre !
for each item in dc
  if ucb.IsFolder(item)  then ' traitement pour chaque sous-répertoire
    d = d+1 ' exemple : compter les sous-répertoires
    explorerDossier(item) ' récursion
  else ' traitement pour chaque fichier
    f = f+1 ' exemple : compter les fichiers
  end if
next
GoTo Exit1

accesInterdit:
Resume Exit1
Exit1:
On Error GoTo 0
End Sub

Le traitement d'erreur est déclenché sur des répertoires interdits, comme C:\System Volume Information sur Windows XP.
______
Bernard
bm92
ManitOOu
ManitOOu
 
Message(s) : 2562
Inscrit le : 26 Nov 2005 14:42

Retour vers Suprême de code

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité