Этот код будет делать то же, что и другие ответы, но также будет возвращать имена папок (так как это кажется частью того, что вы спрашиваете).Для этого потребуется .Net 4.0.Если вы хотите отслеживать, какие папки и какие файлы, вы можете вернуть кортеж, содержащий список файлов и список папок.
List<string> GetFilesAndFolders(string root, int depth)
{
var list = new List<string>();
foreach(var directory in Directory.EnumerateDirectories(root))
{
list.Add(directory);
if (depth > 0)
{
list.AddRange(GetFilesAndFolders(directory, depth-1));
}
}
list.AddRange(Directory.EnumerateFiles(root));
return list;
}
РЕДАКТИРОВАТЬ: код, который хранит папки и файлы отдельно
Tuple<List<string>,List<string>> GetFilesAndFolders(string root, int depth)
{
var folders = new List<string>();
var files = new List<string>();
foreach(var directory in Directory.EnumerateDirectories(root))
{
folders.Add(directory);
if (depth > 0)
{
var result = GetFilesAndFolders(directory, depth-1);
folders.AddRange(result.Item1);
files.AddRange(result.Item2);
}
}
files.AddRange(Directory.EnumerateFiles(root));
return new Tuple<List<string>,List<string>>(folders, files);
}