#c_sharp #net
Не сказал бы, что у меня много папок, которые замедлят работу, но просто интересно. static IEnumerableGetFiles(string path) { Queue queue = new Queue (); queue.Enqueue(path); while (queue.Count > 0) { path = queue.Dequeue(); try { foreach (string subDir in Directory.GetDirectories(path))//Вот тут { queue.Enqueue(subDir); } } catch (Exception ex) { Console.Error.WriteLine(ex); } foreach (string t in Directory.EnumerateFiles(path)) { yield return t; } } }
Ответы
Ответ 1
Если вы хотите в одном цикле обработать и папки и файлы, то можно воспользоваться классом DirectoryInfo и переписать цикл так: var dir = new DirectoryInfo(path); foreach(var fso in dir.EnumerateFileSystemInfos()) { if(fso is DirectoryInfo) queue.Enqueue(fso.FullName); if(fso is FileInfo)//перестраховка, по идее должно хватить просто else yield return fso.FullName; } Можно также воспользоваться перегрузкой метода Directory.GetFiles которая дает тот же результат: Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories); Но с одним недостатком - метод упадет с исключением если у вашей программы, например не хватит прав на чтение какой-то папки.
Комментариев нет:
Отправить комментарий