[C#] Supprimer tous les fichiers d'un dossier

Supprimer tous les fichiers d'un dossier [C#] - C#/.NET managed - Programmation

Marsh Posté le 20-12-2006 à 08:56:33    

Bonjour,
 
comment faire pour supprimer tous les fichiers d'un dossier en C# ?
 
J'ai essayé  
 

Code :
  1. string exepath = null;
  2.             string exedir = null;
  3.             string path = null;
  4.             //Chemin de l'exécutable
  5.             exepath = Environment.GetCommandLineArgs()[0];
  6.             //Répertoire de l'exécutable
  7.             exedir = exepath.Substring(0, exepath.LastIndexOf('\\'));
  8.             path = exedir + @"\images\*.jpg";
  9.             File.Delete(@path);


 
Mais il me dit qu'il y a un caractère illégal dans le string :(

Reply

Marsh Posté le 20-12-2006 à 08:56:33   

Reply

Marsh Posté le 20-12-2006 à 08:58:19    

ligne 9 : vire le "@" devant la variable path

Reply

Marsh Posté le 20-12-2006 à 09:02:03    

Toujours pareil

Reply

Marsh Posté le 20-12-2006 à 09:28:55    

que vaut path après le concat ?

Reply

Marsh Posté le 20-12-2006 à 09:30:26    

C'est bon j'ai trouvé la solution.
Merci quand même
 

Code :
  1. string exepath = null;
  2.                 string exedir = null;
  3.                 //Chemin de l'exécutable
  4.                 exepath = Environment.GetCommandLineArgs()[0];
  5.                 //Répertoire de l'exécutable
  6.                 exedir = exepath.Substring(0, exepath.LastIndexOf('\\'));
  7.                 foreach (string filePath in Directory.GetFiles(exedir + @"\images" ))
  8.                 {
  9.                     if (filePath != exedir + @"\images\noimage.jpg" )
  10.                     {
  11.                         File.Delete(filePath);
  12.                     }
  13.                 }

Reply

Marsh Posté le 20-12-2006 à 09:34:10    

remet le @ devant la ligne path, ou alors utilise \\ au lieu de \
 
un string, ça s'inisitlise avec string.Empty; jamais avec null.
 
le exepath, y'a plus propre pour le récupérer.

Code :
  1. // Chemin du programme EXE
  2.             Application.ExecutablePath;
  3.             // Chemin du répertoire "Démarrer sous" (par défaut, le même répertoire)
  4.             Application.StartupPath;


 
Enfin, File.Delete() n'accepte qu'un nom de fichier, pas un pattern de recherche.
 
Il faut faire comme ça :

Code :
  1. foreach (string f in Directory.GetFiles("monpath", "*.jpg", SearchOption.TopDirectoryOnly))
  2.             {
  3.                 File.Delete(f);
  4.             }

Message cité 1 fois
Message édité par MagicBuzz le 20-12-2006 à 09:37:11
Reply

Marsh Posté le 20-12-2006 à 12:24:02    

MagicBuzz a écrit :


un string, ça s'inisitlise avec string.Empty; jamais avec null.


 
Peux-tu développer stp ? Je viens de chercher vite fait mais n'est pas trouvé.
 
Ce que je sais c'est qu'il ne faut pas initialiser si pas nécessaire, qu'il vaut mieux utiliser string.Empty que "" et qu'il vaut mieux vérifier la longueur d'une chaîne plutôt que de la comparer à string.Empty.
 
Par contre je ne sais rien de la différence entre l'initialisation avec string.Empty ou null.
 
Merci d'avance  :)  

Reply

Marsh Posté le 20-12-2006 à 12:28:14    

pikti a écrit :


 
Par contre je ne sais rien de la différence entre l'initialisation avec string.Empty ou null.


String.Empty = une chaine est créée, la référence existe, mais elle ne contient rien
null = pas de chaine créée, aucune référence, aucun objet

Message cité 1 fois
Message édité par Harkonnen le 20-12-2006 à 12:29:02
Reply

Marsh Posté le 20-12-2006 à 13:26:36    

Harkonnen a écrit :

String.Empty = une chaine est créée, la référence existe, mais elle ne contient rien
null = pas de chaine créée, aucune référence, aucun objet


 
et donc pourquoi initialiser à string.Empty est mieux qu'à null ?

Reply

Marsh Posté le 20-12-2006 à 13:47:30    

parce que pour initialiser une chaine, faut déjà qu'elle existe [:el g]

Reply

Marsh Posté le 20-12-2006 à 13:47:30   

Reply

Marsh Posté le 20-12-2006 à 15:46:28    

bein comprend toujours pas bien, doit être fatigué :)
edit: je veux dire je ne vois pas l'optimisation là-dedans
 
dans l'exemple ci-dessus l'initialisation à null ou autre ne sert d'ailleurs à rien, le mieux serait d'initialiser directement avec la bonne valeur :p
edit: ce qui est plus performant en .net 1.1 ou 2.0 (l'initialisation au moment de la déclaration plutôt que le faire en 2 fois comme ci-dessus)

Message cité 1 fois
Message édité par pikti le 20-12-2006 à 15:47:58
Reply

Marsh Posté le 20-12-2006 à 19:46:19    

pikti a écrit :

bein comprend toujours pas bien, doit être fatigué :)
edit: je veux dire je ne vois pas l'optimisation là-dedans
 
dans l'exemple ci-dessus l'initialisation à null ou autre ne sert d'ailleurs à rien, le mieux serait d'initialiser directement avec la bonne valeur :p
edit: ce qui est plus performant en .net 1.1 ou 2.0 (l'initialisation au moment de la déclaration plutôt que le faire en 2 fois comme ci-dessus)


c'est pas une question d'optimisation, c'est une question de propreté. je n'ai aucune info quand aux différences éventuelles de performance (ceci dit, le string.Empty ca effectivement créer une zone en mémoire, réutilisable par le GC alors qu'un null va retarder au plus tard possible la création de l'objet).
 
sinon, pour le coup du .Length() pour déterminer si tu as la chaîne vide, je ne suis pas convaincu.
 
en tout cas, le compilateur de VS 2005 n'est pas de cet avis : il préconise un == sur string.Empty quand on active les hints d'optimisation (feature de la version architect machin truc à 10000 €).
pour le coup de l'init à string.Empty(), idem, c'est le compilo qui me l'a dit, j'ai pas cherché à décortiquer les articles de 50 pages qu'il te donne comme raisons avec.
 
dans tous les cas, c'est bien plus propre.
 
à noter enfin que si tu fais ça :
 
String toto = null;
 
ça revient EXACTEMENT* à
 
String toto;
 
dans la mesure où si tu fais ça :
 
String toto = null;
 
if (test)
{
    toto = "youpi";
}
 
if (toto.Length > 0)
{
    ...
}
 
Evec ton null t'as lair d'un con, tu plantes. donc tu dois modifier tous tes tests ensuite, afin de vérifier que la chaîne n'est pas égale à null.
 
 
*: "exactement" du point de vue de l'algo que je donne en exemple. il y a une grande différence entre une variable initialisée à null et une variable non initialisée du tout. sauf que ça plantera quand même quand on va vouloir l'appeler ;)

Message cité 1 fois
Message édité par MagicBuzz le 20-12-2006 à 19:51:27
Reply

Marsh Posté le 20-12-2006 à 20:11:37    

merci pour ces précisions :)

Reply

Marsh Posté le 26-01-2007 à 15:47:54    

MagicBuzz a écrit :


sinon, pour le coup du .Length() pour déterminer si tu as la chaîne vide, je ne suis pas convaincu.
 
en tout cas, le compilateur de VS 2005 n'est pas de cet avis : il préconise un == sur string.Empty quand on active les hints d'optimisation (feature de la version architect machin truc à 10000 €;).


 
 
fxCop qui est gratuit lui le dit :p
(et c'est .Length :))
 
http://msdn2.microsoft.com/en-us/l [...] S.80).aspx
 
edit: lien corrigé


Message édité par pikti le 28-01-2007 à 20:22:22
Reply

Marsh Posté le 26-01-2007 à 15:55:50    

hmmmm ah ouais (ps; c'est pas le bon lien, mais c'est pas grave, j'ai trouvé l'article quand même ;))

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed