OVH Cloud OVH Cloud

Rech. equivalent deltree en VB

2 réponses
Avatar
Marc
Bonjour/soir,

je cherche a effacer recursivement le contenu d'un repertoire.

Precisions:
j'ai un repertoire 'c:\mytmp\resultats' avec des sous repertoires 'cas1',
'cas2', ...
Je voudrais effacer les repertoires 'casX, ... et leur contenu mais
conserver le repertoire 'resultats' (c-a-d ne pas l'effacer)

D'avance merci pour votre aide

2 réponses

Avatar
François Picalausa
"Marc" <fun.x@#nospam#caramail.com> a écrit dans le message de
news:3fdd8df5$0$28685$
Precisions:
j'ai un repertoire 'c:mytmpresultats' avec des sous repertoires
'cas1', 'cas2', ...
Je voudrais effacer les repertoires 'casX, ... et leur contenu mais
conserver le repertoire 'resultats' (c-a-d ne pas l'effacer)



Bonjour/soir,

en combinant dir avec la fiche 35 de la faq, tu peux arriver à ce que tu
veux:
Dim strBuffer As String, strFoldersToKill

strBuffer = Dir("c:Windows", vbDirectory Or vbReadOnly Or vbSystem Or
vbHidden Or vbArchive)

Do While strBuffer <> ""
'Vérifie qu'il s'agit bien d'un dossier (sinon, les vbNormal y
passent aussi)
If GetAttr("c:Windows" & strBuffer) And vbDirectory And strBuffer
<> "." And strBuffer <> ".." Then
strFoldersToKill = strFoldersToKill & "c:Windows" & strBuffer
& vbNullChar
End If
strBuffer = Dir
Loop

strFoldersToKill = strFoldersToKill & vbNullChar

MsgBox Replace(Left(strFoldersToKill, Len(strFoldersToKill) - 2),
vbNullChar, ", ")
http://faq.vb.free.fr/index.php?question5


Sinon, pour le faire "à la main":
http://support.microsoft.com/default.aspx?kbid5476
avec Kill pour les fichiers et RmDir pour les dossiers, une fois qu'ils sont
vides.

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Avatar
Marc
C'est bon.

J'ai eu besoin de deux fonctions dont une recursive:
(Le code est inspire d'une page sur un site generaliste)

Public Function DelSubDirs(Directory As String) As Boolean
Dim SubDir As String
Dim Val As String

On Error GoTo Error_Handler

SubDir = Dir(Directory & "*", vbDirectory Or vbNormal)
Do While SubDir <> ""
If SubDir <> "." And SubDir <> ".." Then
If (GetAttr(Directory & "" & SubDir) And vbDirectory) vbDirectory Then
DeleteDirectory (Directory & "" & SubDir)
Else
Val = Directory & SubDir
SetAttr Val, vbReadOnly = 0
Kill (Directory & SubDir)
End If
End If

SubDir = Dir(Directory & "*", vbDirectory Or vbNormal)
If SubDir = "." Then
SubDir = Dir
End If

If SubDir = ".." Then
SubDir = Dir
End If
Loop

DelSubDirs = True
Exit Function

Error_Handler:
DelSubDirs = False
End Function

Public Function DeleteDirectory(Directory As String) As Boolean
Dim SubDirectory As String
Dim Val As String

On Error GoTo Error_Handler

SubDirectory = Dir(Directory & "*", vbNormal Or vbDirectory)
Do While SubDirectory <> ""
If SubDirectory <> "." And SubDirectory <> ".." Then
If (GetAttr(Directory & "" & SubDirectory) And vbDirectory) vbDirectory Then
DeleteDirectory (Directory & "" & SubDirectory & "")
Else
Val = Directory & "" & SubDirectory
SetAttr Val, vbReadOnly = 0
Kill (Directory & "" & SubDirectory)
End If
End If

SubDirectory = Dir(Directory & "*", vbDirectory + vbHidden +
vbSystem + vbArchive)
If SubDirectory = "." Then
SubDirectory = Dir
End If
If SubDirectory = ".." Then
SubDirectory = Dir
End If
Loop
SetAttr Directory, vbReadOnly = 0
RmDir Directory
DeleteDirectory = True
Exit Function

Error_Handler:
DeleteDirectory = False
End Function

"Marc" <fun.x@#nospam#caramail.com> wrote in message
news:3fdd8df5$0$28685$
Bonjour/soir,

je cherche a effacer recursivement le contenu d'un repertoire.

Precisions:
j'ai un repertoire 'c:mytmpresultats' avec des sous repertoires 'cas1',
'cas2', ...
Je voudrais effacer les repertoires 'casX, ... et leur contenu mais
conserver le repertoire 'resultats' (c-a-d ne pas l'effacer)

D'avance merci pour votre aide