Hep me ... script de purge

Résolu
Signaler
Messages postés
47
Date d'inscription
mercredi 3 novembre 2004
Statut
Membre
Dernière intervention
2 mai 2006
-
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
-
Salut,

Je suis en train de terminer une ptite appli en .Net qui va remplacer un script shell Linux (pas forcément aisé...)
Pour finaliser mon appli, il faudrait que sur un rép de destination contenant des fichiers que je viens de créer, je purge le répertoire afin de conserver uniquement les X derniers fichiers créés.

Problème : je débute et je ne vois absolument pas commen faire ça assez simplement !!!

8 réponses

Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
'Lut,

Je viens de te faire vite fait ce que tu souhaites
Etapes:
1)Etabli la liste des fichiers de ton répertoire
2)Déclaration d'un autre tableau qui contiendra les fichiers triés par ordre croissant par date
3)On tri les fichiers et on remplit le nouveau tableau (si tu veux des explications sur le tri demande)
4)On supprime tout les fichiers du nouveau tableau sauf les X derniers fichiers qui correspondent aux X fichiers plus récent (classer du plus ancien au plus récent)

Voici le code (testé avec les dernières dates d'écriture, après c'est toi qui vois si tu veux trier par date de création remplace LastWriteTime par CreationTime !)



'Récupère la liste des fichiers
Dim MyFiles
As
String() = IO.Directory.GetFiles(
"C:\TonRepertoire",
"*")



'Si fichiers trouvés
If
Not MyFiles
Is
Nothing
Then



Dim MySortFiles
As
New ArrayList()
MySortFiles.Add(MyFiles(0))



'Tri les fichiers par date du plus ancien au plus récent
'Les ajoutes dans un nouveau tableau
For i
As
Integer = 1
To MyFiles.Length - 1

Dim CurrentDate
As
Date =
New IO.FileInfo(MyFiles(i)).LastWriteTime

For j
As
Integer = 0
To MySortFiles.Count - 1

Dim NextDate
As
Date =
New IO.FileInfo(MySortFiles(j)).LastWriteTime



'Compare les dates du fichier en cours avec les date des fichiers du nouveau tableau
If
Date.Compare(CurrentDate, NextDate) < 0
Then
MySortFiles.Insert(j, MyFiles(i))

Exit
For
ElseIf j = MySortFiles.Count - 1
Then
MySortFiles.Add(MyFiles(i))

Exit
For
End
If



Next
Next


'Supprime tout les fichiers sauf les x plus récents
'Ici on garde les 5 fichiers les plus récent
Dim X
As
Integer = 5

For i
As
Integer = 0
To (MySortFiles.Count - X) - 1
IO.File.Delete(MySortFiles(i))

Next

End
If


<HR width="100%" SIZE=2>
Si la réponse te conviens merci de l'accepter
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
'Lut,

Si tu veux vider un répertoire tu peux faire comme ceci

dim MesFichiers as string() = system.io.directory.GetFiles("c:\ton_rep") 'liste des fichiers de ton rép
dim LimiteDate as date = now.addhours(-1) 'définie une date/heure limite de conservation de tes fichiers

for i as integer = 0 to MesFichiers.Lenght-1

'récupère la date/heure de création des fichiers
dim DateFichier as date = new system.io.fileinfo(MesFichiers(i)).CreationTime

'compare sa date/heure de création avec la date/heure limite définie
try
'supprime le fichier si sa date de création plus vieille que la date de limite définie
if date.compare(LimiteDate, DateFichier) < 0 then system.io.file.delete(MesFichiers(i))
catch
end try

next

J'ai pas testé mais c'est pour te donner une idée
Ce code récupère la liste des fichiers de ton répertoire
Ensuite il parcourt chaque fichier et compare leur date/heure de création avec une date limite à ne pas dépasser.
Au delà de cette date il sont considérer comme "ancien" et sont supprimer
Voila si j'ai bien compris ce que tu recherches


<HR width="100%" SIZE=2>

Si la réponse te conviens merci de l'accepter
Messages postés
47
Date d'inscription
mercredi 3 novembre 2004
Statut
Membre
Dernière intervention
2 mai 2006

Euh ... oui mais non, j'ai beau retourner le problème et c'est pas ça ... Je dois uniquement conserver les X derniers fichiers créés mais ce de manière indépendante par rapport à la date ... il peut y avoir des fichiers créés l même jour et d'autre une semaine ou 2 avant ... Je dois donc effacer tous ceux qui ne sont pas les X plus récents !!!
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
Ils sont nommés comment tes fichiers ??
Messages postés
47
Date d'inscription
mercredi 3 novembre 2004
Statut
Membre
Dernière intervention
2 mai 2006

NRdatedufichier.reg.htm et menuNRdatedufichier.reg.htm
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
Ok alors si j'ai bien compris là tu ne veux garder que les x derniers fichiers créés ??
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
Si t'es fichiers sont nommés en fonction de la date tu peux faire ceci et gardé les x derniers fichiers

dim MesFichiers as string() = system.io.directory.GetFiles("c:\ton_rep") 'liste des fichiers de ton rép

Array.sort(MesFichiers)

for i as integer = MesFichiers.Lenght - (X + 1) to 0 'X étant le nombres de fichiers à garder
try
IO.File.Delete(MesFichiers(i))
catch
end try
next


<HR width="100%" SIZE=2>
Si la réponse te conviens merci de l'accepter
Messages postés
47
Date d'inscription
mercredi 3 novembre 2004
Statut
Membre
Dernière intervention
2 mai 2006

Euh ... oui mais non c Ko total ...
Tu peux avoir 311205 et 010106 donc ya un gros bug ...
De plus je ne cpte pas ta boucle For ... pourrais tu m'expliquer ?