Parcourir un dossier pour trouver un fichier dont on ne sait pas lenom exact [Résolu]

Messages postés
15
Date d'inscription
lundi 25 août 2008
Dernière intervention
17 novembre 2010
- - Dernière réponse : cs_momo187
Messages postés
15
Date d'inscription
lundi 25 août 2008
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.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
38
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 123 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_casy
Messages postés
155
Date d'inscription
jeudi 12 mai 2005
Dernière intervention
8 mars 2011
2
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 123 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Shaolyne
Messages postés
155
Date d'inscription
jeudi 12 mai 2005
Dernière intervention
8 mars 2011
2
0
Merci
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.
Commenter la réponse de Shaolyne
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
38
0
Merci
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
Commenter la réponse de cs_casy
Messages postés
15
Date d'inscription
lundi 25 août 2008
Dernière intervention
17 novembre 2010
0
Merci
@ 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.
Commenter la réponse de cs_momo187
Messages postés
15
Date d'inscription
lundi 25 août 2008
Dernière intervention
17 novembre 2010
0
Merci
Super.
Merci beaucoup à vous 2 en tout cas.
bon appétit.
Commenter la réponse de cs_momo187

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.