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
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
______
Bernard