Effacer les répertoires temp et custom

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 148 fois - Téléchargée 15 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

Messages postés
14
Date d'inscription
mercredi 2 mars 2005
Statut
Membre
Dernière intervention
20 juillet 2010

Bonjour,
Je suis développeur C Sharp depuis peu donc je suis sur d'avoir des bad practices
merci pour les conseils
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
17
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.
Messages postés
14
Date d'inscription
mercredi 2 mars 2005
Statut
Membre
Dernière intervention
20 juillet 2010

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.
Messages postés
229
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
20 août 2014

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
Messages postés
14
Date d'inscription
mercredi 2 mars 2005
Statut
Membre
Dernière intervention
20 juillet 2010

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.
Afficher les 6 commentaires

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.