[R] Supprimer tout le contenu d'un répertoire
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] Supprimer tout le contenu d'un répertoire
Bonjour le forum,
Voilà, je recherche une méthode pour supprimer tout le contenu d'un répertoire, tout en conservant la structure de ce dernier.
J'ai trouvé dans l'aide de AutoIt les fonctions DirRemove et FileDelete mais la première supprime aussi la structure du répertoire à vider et la seconde ne supprime que les fichiers contenus dans le répertoire à vider.
Quelqu'un pourrait t-il m'aider à concevoir un script qui ferait cela avec AutoIt?
Je vous remercie d'avance.
Amicalement.
Voilà, je recherche une méthode pour supprimer tout le contenu d'un répertoire, tout en conservant la structure de ce dernier.
J'ai trouvé dans l'aide de AutoIt les fonctions DirRemove et FileDelete mais la première supprime aussi la structure du répertoire à vider et la seconde ne supprime que les fichiers contenus dans le répertoire à vider.
Quelqu'un pourrait t-il m'aider à concevoir un script qui ferait cela avec AutoIt?
Je vous remercie d'avance.
Amicalement.
Modifié en dernier par abdel792 le lun. 21 mars 2011 08:59, modifié 1 fois.
- Iste
- Niveau 11

- Messages : 1870
- Enregistré le : jeu. 04 déc. 2008 14:21
- Localisation : 76
- Status : Hors ligne
Re: [..] Supprimer tout le contenu d'un répertoire
Si j'ai bien compris, vous voudriez supprimer tout les fichier d'un dossier et de ses sous dossier, mais pas les dossiers ?
Le plus simple est une approche récursive selon moi.
Voici un petit exemple utilisant une variante de _FileListToArray()
Le plus simple est une approche récursive selon moi.
Voici un petit exemple utilisant une variante de _FileListToArray()
Code : Tout sélectionner
cleanDir("C:\Users\Iste\Desktop\test del")
Func cleanDir(Const $dir)
Local Const $files = _FileListToArray($dir)
For $file In $files
If StringInStr(FileGetAttrib($dir & '\' & $file), 'D') <> 0 Then
cleanDir($dir & '\' & $file)
Else
FileDelete($dir & '\' & $file)
EndIf
Next
EndFunc
Func _FileListToArray($sPath, $sFilter = "*", $iFlag = 0)
Local $hSearch, $sFile, $sFileList, $sDelim = "|"
$sPath = StringRegExpReplace($sPath, "[\\/]+\z", "") & "\" ; ensure single trailing backslash
If Not FileExists($sPath) Then Return SetError(1, 1, "")
If StringRegExp($sFilter, "[\\/:><\|]|(?s)\A\s*\z") Then Return SetError(2, 2, "")
If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
$hSearch = FileFindFirstFile($sPath & $sFilter)
If @error Then Return SetError(4, 4, "")
While 1
$sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If ($iFlag + @extended = 2) Then ContinueLoop
$sFileList &= $sDelim & $sFile
WEnd
FileClose($hSearch)
If Not $sFileList Then Return SetError(4, 4, "")
Return StringSplit(StringTrimLeft($sFileList, 1), "|", 2)
EndFunc;==>_FileListToArraySignez ici
Re: [..] Supprimer tout le contenu d'un répertoire
Bonsoirr,
Tout d'abord, je vous remercie pour cette réponse rapide.
En fait, mon but ce serait de supprimer tout le contenu d'un répertoire donné, fichiers et sous-dossiers confondus.
Cependant, je souhaiterais que le répertoire lui même soit conservé, je ne veux vider que son contenu.
Je vais essayer la solution que vous me suggérez là et je vous tiendrai au courant si ca a bien marché.
Amicalement.
Tout d'abord, je vous remercie pour cette réponse rapide.
En fait, mon but ce serait de supprimer tout le contenu d'un répertoire donné, fichiers et sous-dossiers confondus.
Cependant, je souhaiterais que le répertoire lui même soit conservé, je ne veux vider que son contenu.
Je vais essayer la solution que vous me suggérez là et je vous tiendrai au courant si ca a bien marché.
Amicalement.
- matwachich
- Membre émérite

- Messages : 986
- Enregistré le : lun. 19 oct. 2009 04:04
- Localisation : Algérie
- Status : Hors ligne
Re: [..] Supprimer tout le contenu d'un répertoire
Code : Tout sélectionner
DirRemove("dossier", 1)
DirCreate("dossier")Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
- Iste
- Niveau 11

- Messages : 1870
- Enregistré le : jeu. 04 déc. 2008 14:21
- Localisation : 76
- Status : Hors ligne
Re: [..] Supprimer tout le contenu d'un répertoire
Ha bah dans ce cas c'est tres simple en effet ^^
matwachich, c'est un peu de la triche ca :p surtout si le dossier est verrouillé
Du coup, dans l'exemple que je vous ai passé, dans la boucle for, il suffit de laisser que le "FileDelete($dir & '\' & $file)" et hop, tout sera supprimé !
cela ne justifie par contre pas une modif de _FileListToArray()
(j'avais rajouté le flag 2 sur le Return StringSplit() pour pouvoir faire un foreach)
regardez la doc du coté de FileFindNextFile() pour comprendre comment le faire vous meme.
matwachich, c'est un peu de la triche ca :p surtout si le dossier est verrouillé
Du coup, dans l'exemple que je vous ai passé, dans la boucle for, il suffit de laisser que le "FileDelete($dir & '\' & $file)" et hop, tout sera supprimé !
cela ne justifie par contre pas une modif de _FileListToArray()
(j'avais rajouté le flag 2 sur le Return StringSplit() pour pouvoir faire un foreach)
regardez la doc du coté de FileFindNextFile() pour comprendre comment le faire vous meme.
Signez ici
Re: [..] Supprimer tout le contenu d'un répertoire
Bonsoir,
Je suis tout à fait d'accord avec vous, par rapport à la suppression puis la recréation du dossier car ca pose effectivement problème lorsque le répertoire en question est verrouillé ou protégé.
Cependant, je n'ai toujours pas pu appliquer le script que vous me suggérez, car j'ai un message d'erreur à son exécution.
Le message d'erreur désigne la ligne suivante :
Cette ligne figure dans la fonction CleanDir et voici le texte du message d'erreur :
Error: Variable must be of type "Object".
Etant débutant dans le domaine, je n'ai pas trop compris la signification de ce message d'erreur.
Pour info, j'ai inclu les deux fonctions CleanDir et _FileListToArray dans le script en question.
Je tourne avec la version 3.3.6.1 de AutoIt et suis sous Windows XP familial.
Amicalement.
Je suis tout à fait d'accord avec vous, par rapport à la suppression puis la recréation du dossier car ca pose effectivement problème lorsque le répertoire en question est verrouillé ou protégé.
Cependant, je n'ai toujours pas pu appliquer le script que vous me suggérez, car j'ai un message d'erreur à son exécution.
Le message d'erreur désigne la ligne suivante :
Code : Tout sélectionner
For $file In $filesError: Variable must be of type "Object".
Etant débutant dans le domaine, je n'ai pas trop compris la signification de ce message d'erreur.
Pour info, j'ai inclu les deux fonctions CleanDir et _FileListToArray dans le script en question.
Je tourne avec la version 3.3.6.1 de AutoIt et suis sous Windows XP familial.
Amicalement.
- Iste
- Niveau 11

- Messages : 1870
- Enregistré le : jeu. 04 déc. 2008 14:21
- Localisation : 76
- Status : Hors ligne
Re: [..] Supprimer tout le contenu d'un répertoire
Code : Tout sélectionner
For $file In $filesVotre message d'erreur signifie que chez vous, $files n'était pas un objet, qu'il était pas itérable.
Pour éviter tout problème, utiliser la fonction _FileListToArray() non modifiée, et faire un
Code : Tout sélectionner
For $i = 1 To $files[0]Signez ici
Re: [..] Supprimer tout le contenu d'un répertoire
Bonjour,
Effectivement, en utilisant la version originale de la fonction _FileListToArray que j'ai trouvé dans les archives du forum, j'ai pu vider tout le contenu d'un dossier nommé "Le dossier" et figurant dans le répertoire ou figure le script.
Pour Ce faire, j'ai du apporté une toute petite modification à la fonction CleanDir que m'a suggéré Iste, que je remercie au passage.
J'ai du également introduire la version non-modifiée de la fonction _FileListToArray dans un fichier et l'inclure dans l'entête du script.
Voici le code qui fonctionne à merveille désormais :
Amicalement.
Effectivement, en utilisant la version originale de la fonction _FileListToArray que j'ai trouvé dans les archives du forum, j'ai pu vider tout le contenu d'un dossier nommé "Le dossier" et figurant dans le répertoire ou figure le script.
Pour Ce faire, j'ai du apporté une toute petite modification à la fonction CleanDir que m'a suggéré Iste, que je remercie au passage.
J'ai du également introduire la version non-modifiée de la fonction _FileListToArray dans un fichier et l'inclure dans l'entête du script.
Voici le code qui fonctionne à merveille désormais :
Code : Tout sélectionner
#include "FileListToArray.au3"
;~ cleanDir(@ScriptDir & "\Le dossier")
;~ Func cleanDir(Const $dir)
;~ local $file
;~ Local Const $files = _FileListToArray($dir, "*", 0)
;~ For $file In $files
;~ DirRemove($dir & '\' & $file, 1)
;~ FileDelete($dir & '\' & $file)
;~ Next
;~ EndFunc- Iste
- Niveau 11

- Messages : 1870
- Enregistré le : jeu. 04 déc. 2008 14:21
- Localisation : 76
- Status : Hors ligne
Re: [R] Supprimer tout le contenu d'un répertoire
Pas besoin d'aller chercher si loin, la fonction se trouve dans l'udf File.au3 que vous devriez normalement trouver avec les autres udf fourni avec autoit.devrait donc aller.
Pensez aussi à regarder dans la partie User Defined Functions Reference de la doc
Code : Tout sélectionner
#Include <File.au3>Pensez aussi à regarder dans la partie User Defined Functions Reference de la doc
Signez ici

