5/5 (6 avis)
Snippet vu 5 580 fois - Téléchargée 17 fois
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. } } } } }
27 janv. 2011 à 21:36
Je suis développeur C Sharp depuis peu donc je suis sur d'avoir des bad practices
merci pour les conseils
27 janv. 2011 à 11:43
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.
18 janv. 2011 à 13:44
Les experts en C sharp trouveront ma source inutile mais je pense que certains débutants apprécieront.
18 janv. 2011 à 10:03
un simple fichier batch étant largement suffisant pour vider ces répertoires
17 janv. 2011 à 23:39
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.