Для реализации этой, казалось бы, тривиальной задачи идеально подходит рекурсия, например вот такая:
List<String> GetAllFiles(String aPath)
{
List<String> _tmpFiles = new List<string>();
_tmpFiles.AddRange(Directory.GetFiles(aPath));
foreach (String dirPath in Directory.GetDirectories(aPath))
{
_tmpFiles.AddRange(GetAllFiles(dirPath));
}
return _tmpFiles;
}
Но оказывается, в случае, когда требуется просто получить список файлов (не применяя сложных условий) стоит использовать уже реализованные функции, в частности перегруженный вариант функции Directory.GetFiles с тремя параметрами:
Directory.GetFiles(_strPath, "*.*", SearchOption.AllDirectories)
P.S. Не забываем подключить System.IO;