There are built-in .NET methods for this:
// get all files in folder and sub-folders
Directory.GetFiles(path, "*", SearchOption.AllDirectories);
// get all sub-directories
Directory.GetDirectories(path, "*", SearchOption.AllDirectories);
Somehow I feel that this is not the solution you are looking for, though.
Update:
, , , LINQ. , , :
dirList.SelectMany(x => Directory.GetFiles(x, "*", SearchOption.AllDirectories));
dirList.SelectMany(x => x.Directory.GetDirectories(x, "*", SearchOption.AllDirectories));