5/5 (42 avis)
Snippet vu 45 750 fois - Téléchargée 40 fois
' Version qui ne permet pas le vidage des dossiers temporaires de Windows : Public Function SupprimeRépertoire(Répertoire As String) As Boolean On Error GoTo Erreur Dim SousRépertoire As String Dim Val As String SousRépertoire = Dir(Répertoire, vbDirectory + vbHidden + vbSystem + vbArchive) Do While SousRépertoire <> "" If SousRépertoire <> "." And SousRépertoire <> ".." Then If (GetAttr(Répertoire & SousRépertoire) And vbDirectory) = vbDirectory Then ' C'est un sous-répertoire. Donc, on effectue un appel récursif. SupprimeRépertoire (Répertoire & SousRépertoire & "\") Else ' C'est un fichier. Donc, on concatène le nom du répertoire avec le sien. Val = Répertoire & SousRépertoire ' On s'assure que le fichier n'est pas en lecture seule. SetAttr Val, vbReadOnly = 0 ' On supprime le fichier. Kill (Répertoire & SousRépertoire) End If End If ' Dir peut avoir été appelé, donc on réinitialise le tout. SousRépertoire = Dir(Répertoire, vbDirectory + vbHidden + vbSystem + vbArchive) ' Pour passer le répertoire courant et le répertoire parent. If SousRépertoire = "." Then SousRépertoire = Dir End If If SousRépertoire = ".." Then SousRépertoire = Dir End If Loop If ((Right(Répertoire, 2)) <> ":\") Then ' Ce n'est pas la racine du disque, donc on supprime après s'être assuré que le répertoire n'est pas en lecture seule. SetAttr Répertoire, vbReadOnly = 0 RmDir Répertoire End If SupprimeRépertoire = True Exit Function Erreur: SupprimeRépertoire = False End Function ' Remarque : Si un fichier ou un dossier ne peut être supprimé parce qu'il est en cours d'utilisation, la valeur retournée est "False". Les fichiers qui suivent celui qui n'a pu être supprimé, ne sont donc pas supprimés. ' Version qui permet le vidage des dossiers temporaires de Windows (vidage de dossiers contenant des fichiers en cours d'utilisation) : Public Function SupprimeRépertoire(Répertoire As String) As Boolean On Error GoTo Erreur Dim SousRépertoireOuFichier As String Dim Val As String Dim MyArray() As String Dim I As Long Dim J As Long SousRépertoireOuFichier = Dir(Répertoire, vbDirectory + vbHidden + vbSystem + vbArchive) I = 0 Do While SousRépertoireOuFichier <> "" If SousRépertoireOuFichier <> "." And SousRépertoireOuFichier <> ".." Then ' Redimensionne le tableau dynamique tout en conservant les éventuelles valeurs présentes. ReDim Preserve MyArray(I + 1) If (GetAttr(Répertoire & SousRépertoireOuFichier) And vbDirectory) = vbDirectory Then MyArray(I) = Répertoire & SousRépertoireOuFichier & "\" Else MyArray(I) = Répertoire & SousRépertoireOuFichier End If I = I + 1 End If SousRépertoireOuFichier = Dir Loop J = 0 Do While J < I If Right(MyArray(J), 1) = "\" Then ' C'est un sous-répertoire. Donc, on effectue un appel récursif. SupprimeRépertoire (MyArray(J)) Else ' C'est un fichier. ' Resume Next pour passer à l'instruction suivante si la suppression échoue. On Error Resume Next Val = MyArray(J) ' On s'assure que le fichier n'est pas en lecture seule. SetAttr Val, vbReadOnly = 0 ' On supprime le fichier. Kill (Val) ' On réactive la gestion des erreurs normale. On Error GoTo Erreur End If J = J + 1 Loop If ((Right(Répertoire, 2)) <> ":\") Then ' Ce n'est pas la racine du disque, donc on supprime après s'être assuré que le répertoire n'est pas en lecture seule. SetAttr Répertoire, vbReadOnly = 0 RmDir Répertoire End If SupprimeRépertoire = True Exit Function Erreur: SupprimeRépertoire = False End Function ' Remarque : Si cette fonction est utilisée pour vider un répertoire temporaire de Windows, il est fort probable qu'elle retourne False, car elle ne sait évidemment pas supprimer un répertoire contenant des fichiers en cours d'utilisation. ' Elle ne fait que passer ceux qui ne sont pas supprimables. Donc, elle supprimera tout ce qu'il est possible de supprimer. ' Si le dossier temporaire de Windows ne contient aucun fichier en cours d'utilisation, la fonction pourra faire totalement son travail et retournera True. ' N'oubliez pas de recréer le dossier temporaire dans ce cas ! ' Sinon, vous risquez d'avoir quelques surprises lors des prochaines installations de logiciels, ... ' Version qui permet, si on le désire, de ne supprimer que les répertoires et les fichiers vides : Public Function SupprimeRépertoire(Répertoire As String, Optional ByVal FichiersVidesSeulement As Boolean = False) As Boolean On Error GoTo Erreur Dim SousRépertoireOuFichier As String Dim Val As String Dim MyArray() As String Dim I As Long Dim J As Long SousRépertoireOuFichier = Dir(Répertoire, vbDirectory + vbHidden + vbSystem + vbArchive) I = 0 Do While SousRépertoireOuFichier <> "" If SousRépertoireOuFichier <> "." And SousRépertoireOuFichier <> ".." Then ' Redimensionne le tableau dynamique tout en conservant les éventuelles valeurs présentes. ReDim Preserve MyArray(I + 1) If (GetAttr(Répertoire & SousRépertoireOuFichier) And vbDirectory) = vbDirectory Then MyArray(I) = Répertoire & SousRépertoireOuFichier & "\" Else MyArray(I) = Répertoire & SousRépertoireOuFichier End If I = I + 1 End If SousRépertoireOuFichier = Dir Loop J = 0 Do While J < I If Right(MyArray(J), 1) = "\" Then ' C'est un sous-répertoire. Donc, on effectue un appel récursif. SupprimeRépertoire MyArray(J), FichiersVidesSeulement Else ' C'est un fichier. ' Resume Next pour passer à l'instruction suivante si la suppression échoue. On Error Resume Next Val = MyArray(J) If (Not FichiersVidesSeulement) Then ' On s'assure que le fichier n'est pas en lecture seule. SetAttr Val, vbReadOnly = 0 ' On supprime le fichier. Kill (Val) Else If (FileLen(Val) = 0) Then ' On s'assure que le fichier n'est pas en lecture seule. SetAttr Val, vbReadOnly = 0 ' On supprime le fichier. Kill (Val) End If End If ' On réactive la gestion des erreurs normale. On Error GoTo Erreur End If J = J + 1 Loop If ((Right(Répertoire, 2)) <> ":\") Then ' Ce n'est pas la racine du disque, donc on supprime après s'être assuré que le répertoire n'est pas en lecture seule. SetAttr Répertoire, vbReadOnly = 0 RmDir Répertoire End If SupprimeRépertoire = True Exit Function Erreur: SupprimeRépertoire = False End Function ' Remarque : Toutes les remarques de la deuxième version s'appliquent également à celle-ci. Veuillez les lire aussi... ' Pour ne supprimer que les répertoires et les fichiers vides, effectuez un appel dans le genre de celui qui suit : ' SupprimeRépertoire "X:\MonDossier\", True
18 déc. 2007 à 19:40
Merci
24 nov. 2006 à 18:02
DELETE ds VB
Bonne @ prog!!!
3 nov. 2006 à 13:48
Ceux qui sont sous .net:
Dim Dir As New DirectoryInfo("Chemin de mon dossier a supprimer")
Dir.Delete(True)
25 mai 2006 à 18:40
La fonction tourne correctement. :)
25 mai 2006 à 12:57
Ainsi, je pourrai certainement reproduire le problème et y trouver une solution...
P.S. : Pour la mise en cache, c'est pareil chez moi, mais la plupart des gens la laissent active...
P.P.S. : J'aimerais vraiment savoir si ce sont des dossiers ou des fichiers qui posent le problème, mais également si l'explorateur Windows était ouvert sur le dossier ou un des sous-dossiers (cela pose parfois problème, cfr. limitations) lors de l'exécution de la fonction.
Bonne prog. !
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.