Hep me ... script de purge

Résolu
nyoto Messages postés 47 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 2 mai 2006 - 9 févr. 2006 à 17:51
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 - 15 févr. 2006 à 18:37
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

cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 23
15 févr. 2006 à 18:37
'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
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 23
9 févr. 2006 à 18:56
'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
0
nyoto Messages postés 47 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 2 mai 2006
10 févr. 2006 à 09:51
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 !!!
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 23
10 févr. 2006 à 12:31
Ils sont nommés comment tes fichiers ??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nyoto Messages postés 47 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 2 mai 2006
10 févr. 2006 à 14:32
NRdatedufichier.reg.htm et menuNRdatedufichier.reg.htm
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 23
10 févr. 2006 à 17:04
Ok alors si j'ai bien compris là tu ne veux garder que les x derniers fichiers créés ??
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 23
11 févr. 2006 à 18:32
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
0
nyoto Messages postés 47 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 2 mai 2006
15 févr. 2006 à 12:51
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 ?
0
Rejoignez-nous