Parcourir un dossier pour trouver un fichier dont on ne sait pas lenom exact

Résolu
cs_momo187 Messages postés 15 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 17 novembre 2010 - 17 nov. 2010 à 10:35
cs_momo187 Messages postés 15 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 17 novembre 2010 - 17 nov. 2010 à 11:48
Bonjour,

Cela fait un moment que je me mélange les pinceaux alors je sollicite votre aide.
Je dois écrire la date du jour dans un fichier texte. Jusque là rien de bien méchant.
Simplement le nom du fichier est aléatoire, je sais uniquement qu'il commence par "log_".
Savez-vous comment dois-je m'y prendre pour parcourir le dossier et ouvrir le fichier qui commence par "log_"?
Peu importe ce qu'il y a ensuite, ce sera le seul fichier du répertoire commençant par "log_". J'ai regardé au niveau de substring mais je ne trouve vraiment rien.

merci d'avance pour votre aide.

6 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
17 nov. 2010 à 11:20
Tu incluerais ceci dans un foreach par exemple?

Pas forcément ! Pour traiter tous les fichiers "log_...", il faudrait, mais dans ton cas ....

Si tu es certain que ton dossier ne pourra jamais contenir qu'un seul fichier log_..., Le tableau retourné par GetFiles ne contiendra donc jamais plus d'un seul élément, qui sera donc toujours l'élément d'index 0.

Il faut quand même que tu teste si le tableau retourné contient au moins un élément. S'il en contient 1 et que tu es sur de ton coup, tu peux directement adressé l'élément 0, au lieu de parcourir l'ensemble du tableau avec un For Each.

Ceci dit, un For Each parcourra l'ensemble du tableau qui ne devrais contenir qu'un seul élément, il l'adressera donc que l'élément 0. Cela revient au même !!!!
La seule différence, c'est, si jamais un jour tu as plusieurs fichiers :
- D'adresser directement l'élément 0 ne traitera qu'un seul fichier "log_..." sans être certains que ce soit le bon, il traitera le premier trouvé
- D'utiliser un For Each traitera l'ensemble des fichiers trouvé. Le bon sera traité mais les autres aussi.



[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
3
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
17 nov. 2010 à 11:31
Je viens de lancer le code sous VS, effectivement j'avais manqué que sFilenName contient le chemin complet du fichier.

Voici donc le code correct:
foreach (string sFileName in System.IO.Directory.GetFiles())
{
   FileInfo fi = new FileInfo(sFileName);
   if (fi.Name.StartsWith("Log_", StringComparison.InvariantCultureIgnoreCase))
      //Ouvrir le fichier et écrire (utiliser fi)
}


Concernant l'utilisation du paramètre "Search Pattern" - log_*.* - l'approche est plus pertinente et adaptée à ton besoin.
Tu peux l'utiliser comme ceci:
String[] fichiers = System.IO.Directory.GetFiles(, "log_*.*")
if(fichiers.Length == 1)
{
   FileInfo fi = new FileInfo(fichiers[0]);
   ///etc...
}


Shao.
3
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
17 nov. 2010 à 10:58
Tu peux utiliser
filename.StartsWith("log_", StringComparison.InvariantCultureIgnoreCase)


Pour récupérer une référence vers un dossier et itérer à travers la liste de ses fichiers, tu peux faire ceci:
foreach (string sFileName in System.IO.Directory.GetFiles(<Chemin vers ton répertoire>))
{
   if(filename.StartsWith("log_", StringComparison.InvariantCultureIgnoreCase))
     //Ouvrir le fichier et écrire
}


Shao.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
17 nov. 2010 à 11:04
System.IO.Directory.GetFiles(TonDossier, "log_*.*")
te renverra un tableau de string contenant tous les fichiers du dossier en question commençants pas log_


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_momo187 Messages postés 15 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 17 novembre 2010
17 nov. 2010 à 11:10
@ Shaolyne :
J'ai bien aimé ton foreach, mais lorsque je l'exécute en pas à pas et que j'arrive sur mon fichier en question, il ne rentre par dans le test, comme si il n'était pas d'accord avec "log_" comme s'il ne le trouve pas.
Il faut savoir que mon fichier commence par "log_" mais entièrement il peut se nommer "log_10112010.txt"
Tu vois?

@ casy :

Tu incluerais ceci dans un foreach par exemple?

Merci pour votre aide en tout cas.
0
cs_momo187 Messages postés 15 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 17 novembre 2010
17 nov. 2010 à 11:48
Super.
Merci beaucoup à vous 2 en tout cas.
bon appétit.
0
Rejoignez-nous