Comment parcourir tous les fichiers d'un répertoire en c # .net?

121

Je veux obtenir les fichiers dans le dossier et aussi dans ses sous-dossiers.Le code suivant ne récupère pas les fichiers dans son sous-dossier:

string[] files = Directory.GetFiles(txtFolderPath.Text, "*ProfileHandler.cs");

Quelqu'un peut-il me dire comment implémenter cela dans c # .net?

Prem
la source
2
J'ai toujours préféré la méthode MSDN pour faire les choses. Au bas de ce lien, ils fournissent un exemple récursif avec un programme de console (C #).
Justin
1
@Panuvin - Remarque: Le code MSDN est un peu dangereux. Pour le contenu de dossier et de sous-dossier très volumineux (beaucoup de fichiers), vous pouvez obtenir une exception StackOverflow (à cause du code récursif)
Joezer

Réponses:

216
string[] files = 
    Directory.GetFiles(txtPath.Text, "*ProfileHandler.cs", SearchOption.AllDirectories);

Ce dernier paramètre affecte exactement ce à quoi vous faites référence. Définissez-le sur AllDirectories pour chaque fichier, y compris dans les sous-dossiers, et définissez-le sur TopDirectoryOnly si vous souhaitez uniquement rechercher dans le répertoire donné et non dans les sous-dossiers.

Reportez-vous à MDSN pour plus de détails: https://msdn.microsoft.com/en-us/library/ms143316(v=vs.110).aspx

Migwell
la source
5
Cela fera une boucle infinie s'il y a une boucle dans votre structure de dossiers. Voir msdn.microsoft.com/en-us/library/ms143448.aspx
Anthony Wieser
À quoi sert le paramètre intermédiaire?
utileBee
2
Il s'appelle searchPattern et c'est un filtre par lequel les fichiers sont sélectionnés. Dans ce cas, il sélectionnera tous les fichiers se terminant par "ProfileHandler.cs". Jetez un œil à MDSN
Migwell
3

essayez ci-dessous le code

Directory.GetFiles(txtFolderPath.Text, "*ProfileHandler.cs",SearchOption.AllDirectories)
TalentTuner
la source