Effacer les répertoires temp et custom

5/5 (6 avis)

Snippet vu 5 580 fois - Téléchargée 17 fois

Contenu du snippet

Je souhaite effacer certains répertoires temp mais pas tous.
Il suffit de les définir dans la listeChemin

Source / Exemple :


using System.IO;
using System;
namespace del_temp
{
 class Program
 {
  static void Main (string[] args)
  {
   string[] listeChemin = { "C:\\temp", "C:\\tempo", "D:\\temp", "D:\\tempo", };
   foreach (string path in listeChemin)
   {
    delete_files (path);
    delete_repertoire (path);
   }
   Console.WriteLine ("");
   Console.WriteLine ("Les fichiers temporaires de C et D dans temp et tempo ont étés effacés");
   Console.WriteLine ("");
   Console.WriteLine ("Appuyez sur une touche pour sortir:");
   Console.ReadKey ();
  }

  private static void delete_repertoire (string chemin)
  {
   bool EtSousRepertoire = true;
   FileInfo file = new FileInfo (chemin);
   DirectoryInfo dir = file.Directory;
    try
    {
     Directory.Delete (chemin, EtSousRepertoire);
    }
    catch (Exception e)
    {
     Console.WriteLine ("erreur: {0}", e.ToString ());
    }
    Check_Directory (chemin);
   }

  private static void Check_Directory (string chemin)
  {
   if (!Directory.Exists(chemin)) 
   {
    DirectoryInfo di = Directory.CreateDirectory (chemin);
   }
  }

  private static void delete_files (string chemin)
  {
   Check_Directory (chemin);
   foreach (string entry in Directory.GetFiles (@chemin))
   {
    try
    {
     File.Delete (entry);
    }
    catch (Exception e)
    {
     if (e.ToString() ==  "System.UnauthorizedAccessException")
     {
      Console.WriteLine ("Fichier avec accés refusé: {0}", e.ToString ());
     }
     Console.WriteLine ("erreur: {0}", e.ToString ());
     //if file is locked, we go on to the next file.
    }
   }
  }
 }
}

Conclusion :


Ecris en C Sharp 4.0

A voir également

Ajouter un commentaire Commentaires
fredatcs Messages postés 14 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 20 juillet 2010
27 janv. 2011 à 21:36
Bonjour,
Je suis développeur C Sharp depuis peu donc je suis sur d'avoir des bad practices
merci pour les conseils
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
27 janv. 2011 à 11:43
Bonjour,

En plus des commentaires de merlin2000 et shenron666, j'ajouterai les remarques suivantes:
1. Pourquoi supprimer les fichiers du répertoire avant de supprimer le répertoire alors que la méthode Directory.Delete(string, bool) peut s'en charger: http://msdn.microsoft.com/fr-fr/library/fxeahc5f%28v=VS.80%29.aspx .

2. L'utilisation de la ligne:
if (e.ToString() == "System.UnauthorizedAccessException")
est plus que déconseillée. On pourrait même dire que c'est un "bad-practice".
Il faut préférer le code suivant:
catch(UnauthorizedAccessException ex)
{
// Ici pour unauthorized...
}
catch (Exception ex)
{
// Ici pour les autres types d'exception...
}

3. Ne pas nommer une fonction qui ne fait pas ce qu'elle dit. ie:
- "delete_repertoire" ne supprime pas le répertoire car elle le re-créé à la fin...
- "check_directory" créé le répertoire alors que ce n'est pas la traduction de check...
- etc...

4. Le mélange de français/anglais n'est pas des plus séduisant. Choisis une ligne de conduite et tiens là.

5. Pas mal de choses seraient aussi à revoir au niveau de la gestion des exceptions, de la sortie console des infos, etc...

Tout ceci empêche complétement la ré-utilisabilité de ce code.
fredatcs Messages postés 14 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 20 juillet 2010
18 janv. 2011 à 13:44
En effet un del c:\temp\*.* dans un fichier bat aurait suffit mais j'apprends le C sharp et cela ma donné une excuse.
Les experts en C sharp trouveront ma source inutile mais je pense que certains débutants apprécieront.
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
18 janv. 2011 à 10:03
tout ça pour ça, ou comment utiliser un bazooka pour tuer une mouche
un simple fichier batch étant largement suffisant pour vider ces répertoires
fredatcs Messages postés 14 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 20 juillet 2010
17 janv. 2011 à 23:39
Bonjour Merlin,
merci pour ces remarques
1. moi je préfère hardcoder C:\temp
merci pour System.IO.Path.GetTempPath(), je ne connaissais pas

2. EtSousRépertoire c'est juste pour que ce soit plus lisible
en effet True est suffisant.

3. je crée le répertoire c:\temp car je ne sais pas comment tous les sous-répertoires de c:\temp sans effacer ce dernier.
si tu as une solution, je suis preneur.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.