Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1797 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1493878
kramik
Posté le 20-12-2006 à 08:56:33  profilanswer
 

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 :(

mood
Publicité
Posté le 20-12-2006 à 08:56:33  profilanswer
 

n°1493879
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-12-2006 à 08:58:19  profilanswer
 

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

n°1493885
kramik
Posté le 20-12-2006 à 09:02:03  profilanswer
 

Toujours pareil

n°1493898
_darkalt3_
Proctopathe
Posté le 20-12-2006 à 09:28:55  profilanswer
 

que vaut path après le concat ?

n°1493899
kramik
Posté le 20-12-2006 à 09:30:26  profilanswer
 

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.                 }

n°1493902
MagicBuzz
Posté le 20-12-2006 à 09:34:10  profilanswer
 

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
n°1494108
pikti
I’ve done worse
Posté le 20-12-2006 à 12:24:02  profilanswer
 

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  :)  

n°1494110
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-12-2006 à 12:28:14  profilanswer
 

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
n°1494140
pikti
I’ve done worse
Posté le 20-12-2006 à 13:26:36  profilanswer
 

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 ?

n°1494166
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-12-2006 à 13:47:30  profilanswer
 

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

mood
Publicité
Posté le 20-12-2006 à 13:47:30  profilanswer
 

n°1494346
pikti
I’ve done worse
Posté le 20-12-2006 à 15:46:28  profilanswer
 

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
n°1494500
MagicBuzz
Posté le 20-12-2006 à 19:46:19  profilanswer
 

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
n°1494517
pikti
I’ve done worse
Posté le 20-12-2006 à 20:11:37  profilanswer
 

merci pour ces précisions :)

n°1507531
pikti
I’ve done worse
Posté le 26-01-2007 à 15:47:54  profilanswer
 

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
n°1507536
MagicBuzz
Posté le 26-01-2007 à 15:55:50  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

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

 

Sujets relatifs
generer un fichier texte et l'envoyer dans un dossier[ASP.Net] .Net, Fichiers et RegExp
obtenir les fichiers d'un répertoire en shellInsertion plusieurs fichiers flv.
creation hyperliens vers dossier [VBA - E]Restreindre une navigation de dossier
Partager un dossier avec plusieurs sites[PHP : facile je pense] Fichiers en php et incrementation de variables
Pb de ciblage de fichiersRegDelete ... pas moyen de supprimer une clé
Plus de sujets relatifs à : [C#] Supprimer tous les fichiers d'un dossier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR