Как перебрать все файлы в каталоге в с # .net?


121

Я хочу получить файлы в папке, а также в ее подпапках. Следующий код не получает файлы в своей подпапке:

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

Может ли кто-нибудь рассказать мне, как это реализовать в С # .net?


2
Я всегда предпочитал метод работы MSDN. Внизу этой ссылки приводится рекурсивный пример с консольной программой (C #).
— Джастин

1
@Panuvin - Примечание: код MSDN немного опасен. Для очень больших папок и подпапок (много-много файлов) вы можете получить исключение StackOverflow (из-за рекурсивного кода)
— Joezer

Ответы:


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

Этот последний параметр влияет именно на то, о чем вы говорите. Установите для него AllDirectories для каждого файла, находящегося в подпапках, и установите для него TopDirectoryOnly, если вы хотите искать только в указанном каталоге, а не в подпапках.

За подробностями обращайтесь к MDSN: https://msdn.microsoft.com/en-us/library/ms143316(v=vs.110).aspx


5
Это будет бесконечный цикл, если в вашей структуре папок есть цикл. См. Msdn.microsoft.com/en-us/library/ms143448.aspx
— Энтони Визер

Для чего нужен средний параметр?
— полезноBee

2
Он называется searchPattern и представляет собой фильтр, по которому выбираются файлы. В этом случае он выберет все файлы, заканчивающиеся на «ProfileHandler.cs». Взгляните на MDSN
— Migwell

3

попробуйте ниже код

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.