Page 1 sur 1
[R] Vider Le contenu d'un Répertoire
Posté : jeu. 02 juil. 2009 21:53
par africanism
Bonjour a tous
voila je voudrais vider le contenu du repertoire c:\temp
bien sur je sais que certain fichier ne pouront etre supprime car en cour d'utilisation
j'ai bien essayer filedelete mais ce n'est pas ce qui me faut ou alors je mi prend mal
Cdt
merci a tous
Re: [..] Vider Le contenue d'un Repertoire
Posté : jeu. 02 juil. 2009 22:10
par jumby
Tu peux supprimer l'intégralité du dossier(excepté ceux en cours d'utilisation) avec la fonction DirRemove :
Tu peux supprimer un à un les fichiers(excepté ceux en cours d'utilisation) présents dans le dossier :
Code : Tout sélectionner
#Include <File.au3>
#Include <Array.au3>
$FileList=_FileListToArray(@Tempdir)
If @Error=1 Then
MsgBox (0,"","No Files\Folders Found.")
Exit
EndIf
for $i = 1 to $FileList[0]
FileDelete(@Tempdir&'\'&$FileList[$i])
Next
Re: [..] Vider Le contenue d'un Repertoire
Posté : ven. 03 juil. 2009 00:01
par alex65
Pour éviter de recrééer le dossier "temp" on peut aussi compléter le code comme ça :
Code : Tout sélectionner
#Include <File.au3>
#Include <Array.au3>
$FileList=_FileListToArray(@Tempdir)
If @Error=1 Then
MsgBox (0,"","No Files\Folders Found.")
Exit
EndIf
for $i = 1 to $FileList[0]
$attrib = FileGetAttrib(@Tempdir&'\'&$FileList[$i])
If @error Then
MsgBox(4096,"Error", "Could not obtain attributes.")
Exit
Else
If StringInStr($attrib, "D") Then
DirRemove(@Tempdir&'\'&$FileList[$i], 1)
Else
FileDelete(@Tempdir&'\'&$FileList[$i])
EndIf
EndIf
Next
Re: [..] Vider Le contenue d'un Repertoire
Posté : ven. 03 juil. 2009 00:27
par jumby
Le code suivant :
Code : Tout sélectionner
#Include <File.au3>
#Include <Array.au3>
$FileList=_FileListToArray(@Tempdir)
If @Error=1 Then
MsgBox (0,"","No Files\Folders Found.")
Exit
EndIf
for $i = 1 to $FileList[0]
FileDelete(@Tempdir&'\'&$FileList[$i])
Next
Ne supprimera pas le dossier. Uniquement les fichiers qu'il contient.
Re: [..] Vider Le contenue d'un Repertoire
Posté : ven. 03 juil. 2009 00:35
par alex65
Oui, mais il ne supprimera pas les dossiers, si il y en a. Et comme je trouve dangereux de supprimer un dossier qui fait parti des variables Windows, je me suis permis cette suggestion.
Re: [..] Vider Le contenue d'un Repertoire
Posté : ven. 03 juil. 2009 12:27
par tolf
Pour supprimer tous les dossier et sous-dossiers d'un répertoire, il faudra utiliser une recherche récursive : on a une fonction qui fait la liste des fichiers et qui les supprime un a un (avec par exemple écriture dans la console des fichiers non supprimés) et ensuite, cette fonction fait appel à elle-même pour chaque sous-dossier.
Si vous ne voulez pas supprimer certains sous-dossiers, vous pouvez les spécifier dans le code ou demander à l'utilisateur pour chaque dossier.
Re: [..] Vider Le contenue d'un Repertoire
Posté : ven. 03 juil. 2009 12:30
par GhostLine
Dans ce cas, rajouter les fichiers systèmes, cachés, et en lecture seule dans la liste des choses à ne pas zapper serait peut être une bonne idée ^^
Re: [..] Vider Le contenue d'un Repertoire
Posté : lun. 06 juil. 2009 11:47
par tolf
D'un autre côté, je ne pense pas que windows ou n'importe quel programme mette des fichiers sensibles et à ne pas supprimer dans le dossier temp vu que ce dossier est justement fait pour stocker des fichiers à supprimer après leur utilisation.
Et si vous voulez vraiment plus de sécurité, supprimez les depuis votre navigateur.
Re: [..] Vider Le contenue d'un Repertoire
Posté : lun. 06 juil. 2009 19:31
par SagePourpre
Comme mentionné par Tolf, il n'y a absolument aucun danger à supprimer l'intégralité des fichier contenus dans le dossier temp.
Le code le plus simple à déjà été donné, c'est carrément d'utiliser DirRemove
Code : Tout sélectionner
$temp = "C:\windows\temp\"
DirRemove($temp,1)
DirCreate($temp)
Je suis même pratiquement sur qu'il est inutile de recréer le dossier "Temp" puisque selon moi, il se recréera automatiquement de lui-même si tôt qu'un
fichier y sera déplacé par le système d'exploitation (Je l'ai quand même mis juste au cas)
Pour un nettoyage plus "complet" des fichiers inutiles, tu peux aussi utiliser Ccleaner portable. Il te proposera en prime d'effacer des fichiers temporaires à d'autres endroit sur ton ordinateur (ainsi que nettoyer ton historique, etc...) et de plus, il est très simple d'utilisation. Il y'a même moyen de faire le ménage dans regedit avec cette application de façon très simple.
Re: [..] Vider Le contenue d'un Repertoire
Posté : jeu. 09 juil. 2009 10:28
par GhostLine
Il me parait surtout improbable qu'il se laisse supprimer, dans la mesure où la grande majorité du temps, il y a un fichier en cours d'accès en son sein ^^
Re: [..] Vider Le contenue d'un Repertoire
Posté : jeu. 09 juil. 2009 18:26
par SagePourpre
GhostLine a écrit :Il me parait surtout improbable qu'il se laisse supprimer, dans la mesure où la grande majorité du temps, il y a un fichier en cours d'accès en son sein ^^
S'il ne se laisse pas supprimer, les fichiers qui ne sont pas en cours d'utilisation seront supprimés (du moins, c'est ce que ça a fait lorsque je l'ai testé)
Re: [..] Vider Le contenue d'un Repertoire
Posté : mer. 19 août 2009 22:15
par Serge63
Bonsoir
Je me suis inspiré de ce post pour créer un programme dont j'avais besoin. Dans le cadre de mon travail, je dois régulièrement faire le ménage sur des ordinateurs qui comportent plusieurs utilisateurs ; alors ça devient vite fastidieux pour faire le ménage dans tous les profils...
J'ai décidé de vous faire part du résultat de mes recherches, car je pense que ce petit programme devrait intéresser les administrateurs qui sont dans mon cas.
► Afficher le texte
Code : Tout sélectionner
; ce programme va supprimer le contenu de tous les dossiers temporaires suivants
;
; C:\Temp
; C:\Windows\Temp
; C:\Documents and Settings\nom_utilisateur\Local Settings\Temp <===(pour chaque utilisateur)
;
; Il est recommandé de fermer toutes les applications avant d'utiliser ce programme.
;
; Si des fichiers temporaires sont ouverts par Windows, le système empêchera leur suppression.
;
;=======================================================================================================================
; appel des librairies
;=======================================================================================================================
Opt("MustDeclareVars", 1)
#Include <File.au3>
#Include <Array.au3>
;=======================================================================================================================
; début du programme
;=======================================================================================================================
; déclaration des variables du programme
GLOBAL $avUtilisateurs
LOCAL $sChemin
LOCAL $iCtr_util
LOCAL $sType
; on prépare le type de profil
$sType = "SYSTEME"
; on prépare le nom du dossier
$sChemin = "C:\TEMP\"
; s'il existe, on fait appel à la fonction de nettoyage pour le vider
If FileExists($sChemin) Then Nettoyer($sChemin, $sType)
; on prépare le nom du dossier
$sChemin = "C:\WINDOWS\TEMP\"
; s'il existe, on fait appel à la fonction de nettoyage pour le vider
If FileExists($sChemin) Then Nettoyer($sChemin, $sType)
; on récupère la liste des profils (nom des dossiers utilisateurs) dans un tableau
$avUtilisateurs = _FileListToArray("C:\Documents and Settings\")
; on enlève les noms des dossiers système de la liste des profils
Enlever("All Users")
Enlever("Default User")
Enlever("LocalService")
Enlever("NetworkService")
; on change le type de profil
$sType = "UTILISATEUR"
; on va traiter chaque profil un par un
For $iCtr_util = 1 To $avUtilisateurs[0]
; on prépare le chemin du dossier temporaire du profil en cours
$sChemin = "C:\Documents and Settings\" & $avUtilisateurs[$iCtr_util] & "\Local Settings\Temp"
; s'il existe, on va nettoyer le dossier temporaire du profil en cours
If FileExists($sChemin) Then Nettoyer($avUtilisateurs[$iCtr_util], $sType)
Next
;=======================================================================================================================
; fonction de nettoyage de la liste des profils
;=======================================================================================================================
Func Enlever($sElement)
; déclaration des variables de la fonction
LOCAL $iNumero
LOCAL $sSuite = "OUI"
LOCAL $sNombre
; on va traiter toutes les occurences
While $sSuite = "OUI"
; on cherche l'index de élément
$iNumero = _ArraySearch($avUtilisateurs, $sElement, 0, 0, 0, 1)
; si on trouve l'élément
If @error = 0 Then
; on supprime la ligne du tableau correspondant
_ArrayDelete($avUtilisateurs, $iNumero)
; on récupère le nombre total de profils et on lui enlève 1
$sNombre = $avUtilisateurs[0] - 1
; on remplace le nombre total de profils par la nouvelle valeur
$avUtilisateurs[0] = $sNombre
Else
; sinon on arrête la recherche
$sSuite = "NON"
EndIf
Wend
EndFunc
;=======================================================================================================================
; fonction de nettoyage des dossiers
;=======================================================================================================================
Func Nettoyer($sDossier, $sProfil)
; déclaration des variables de la fonction
LOCAL $avListe_fichiers
LOCAL $iCtr
LOCAL $sAttributs
LOCAL $sAfficher
; on vérifie si c'est un profil SYSTEME
If $sProfil = "SYSTEME" Then
; on prépare le message à afficher
$sAfficher = "Nettoyage du dossier """ & $sDossier
Else
; on prépare le message à afficher
$sAfficher = "Nettoyage du dossier de """ & StringUpper($sDossier)
; on complète le nom du dossier
$sDossier = "C:\Documents and Settings\" & $sDossier & "\Local Settings\Temp"
EndIf
; on affiche le message pour faire patienter l'utilisateur
SplashTextOn("", $sAfficher & """ en cours ...", 600, 70, -1, -1, 0 + 1 + 16 + 32, "Times New Roman", 12, 800)
; on met une pause pour que l'utilisateur puisse lire le message
Sleep(1000)
; on récupère la liste des fichiers et dossiers dans un tableau
$avListe_fichiers = _FileListToArray($sDossier)
; si le dossier contient des fichiers, on continue
If @error = 0 Then
; on enlève les attributs de tous les fichiers, dossiers et sous-dossiers
RunWait(@ComSpec & " /c " & "ATTRIB -R -H -S " & $sDossier & "* /S /D", "", @SW_HIDE )
; on va traiter les éléments du tableau un par un
For $iCtr = 1 To $avListe_fichiers[0]
; on récupère l'attribut de l'élément pour savoir si c'est un fichier ou un dossier
$sAttributs = FileGetAttrib($sDossier & '\' & $avListe_fichiers[$iCtr])
; si on a réussi à lire l'attribut, on continue
If @error = 0 Then
; si l'attribut correspond à un dossier
If StringInStr($sAttributs, "D") Then
; on supprime le dossier
DirRemove($sDossier & '\' & $avListe_fichiers[$iCtr], 1)
; sinon l'attribut correspond à un fichier
Else
; on supprime le fichier
FileDelete($sDossier & '\' & $avListe_fichiers[$iCtr])
EndIf
EndIf
Next
EndIf
; on efface le message
SplashOff()
EndFunc
Je suis preneur de toute remarque en vue d'optimiser ou améliorer ce code.
.