2009-09-03 8 views
2

Je souhaite exécuter une minuterie toutes les 5 heures et supprimer les fichiers du dossier de plus de 4 jours. Pourriez-vous s'il vous plaît avec l'exemple de code?Supprimer les fichiers du dossier de plus de 4 jours

+5

Y at-il une partie spécifique de ceci vous avez besoin de l'aide? Personne ne va simplement écrire le code pour vous. –

Répondre

4

Comme il n'a pas été mentionné, je recommanderais d'utiliser un System.Threading.Timer pour quelque chose comme ça. Voici un exemple d'implémentation:

System.Threading.Timer DeleteFileTimer = null; 

private void CreateStartTimer() 
{ 
    TimeSpan InitialInterval = new TimeSpan(0,0,5); 
    TimeSpan RegularInterval = new TimeSpan(5,0,0); 

    DeleteFileTimer = new System.Threading.Timer(QueryDeleteFiles, null, 
      InitialInterval, RegularInterval); 

} 

private void QueryDeleteFiles(object state) 
{ 
    //Delete Files Here... (Fires Every Five Hours). 
    //Warning: Don't update any UI elements from here without Invoke()ing 
    System.Diagnostics.Debug.WriteLine("Deleting Files..."); 
} 

private void StopDestroyTimer() 
{ 
    DeleteFileTimer.Change(System.Threading.Timeout.Infinite, 
    System.Threading.Timeout.Infinite); 

    DeleteFileTimer.Dispose(); 
} 

De cette façon, vous pouvez exécuter votre code de suppression de fichiers dans un service de fenêtres avec un minimum de tracas.

+0

Merci pour votre suggestion. Quand dois-je utiliser le StopDestroyTimer()? –

+0

Appelez simplement lorsque vous souhaitez que la minuterie s'arrête ou lorsque votre service/application est en cours d'arrêt. La chose la plus importante est de l'appeler parfois - (System.Threading.) Timer implémente IDisposable de sorte que l'appel à Dispose() est nécessaire. –

+0

Merci encore. Je l'ai. –

8
DateTime CutOffDate = DateTime.Now.AddDays(-4) 
DirectoryInfo di = new DirectoryInfo(folderPath); 
FileInfo[] fi = di.GetFiles(); 

for (int i = 0; i < fi.Length; i++) 
{ 
    if (fi[i].LastWriteTime < CutOffDate) 
    { 
     File.Delete(fi[i].FullName); 
    } 
} 

Vous pouvez remplacer LastWriteTime propriété pour quelque chose d'autre, qui est exactement ce que j'utilise quand déblayer un cache d'image dans une application que j'ai.

EDIT:

Bien que cela ne marche pas inclure la partie de la minuterie ... Je vous laisse comprendre cette partie vous-même. Un peu de googling devrait vous montrer plusieurs façons de le faire sur un calendrier.

+0

Merci Neil pour le code. C'est ce que je cherche. –

Questions connexes